2013-09-29 6 views
-1

이전에는 일반적인 mysqli 쿼리를 사용하여 데이터베이스에 값을 삽입하여 real_escape_string 보안을 설정했지만 더 나은 보안을 위해 준비된 명령문을 사용하는 것으로 보입니다. 보안을 강화하고 SQL 삽입을 방지하기 위해 준비된 문으로 코드를 대체 하겠지만 아래에 주어진 준비된 문이 얼마나 안전한지 알고 싶습니다. 더 나은 보안을 위해 더 이상의 개선을 제안 할 수 있습니까?이 mysqli 준비 문은 얼마나 안전합니까?

$stmt = mysqli_prepare($DB_connection,"INSERT INTO `posts`(`example`, `example2`) VALUES ('$for_example',?)"); 
    mysqli_stmt_bind_param($stmt, 's', $_POST['username']); 
    mysqli_stmt_execute($stmt); 
    mysqli_stmt_close($stmt); 

POST 메서드를 사용하여 양식에서 값을 가져 와서 데이터베이스에 추가합니다. 사용자가 SQL 삽입으로 데이터베이스의 값을 바꿀 수 있습니까?
사전에 도움을 주셔서 감사합니다. PHP 설명서에서

+0

'$ 무엇을 for_example'입니까? – deceze

+0

'$ for_example'을 다음과 같이 세션 변수로 대체합니다. $ _SESSION [ 'username']'등 – mwaseema

답변

0

: 준비된 문에

매개 변수는 인용 할 필요가 없습니다; 드라이버가이 문제를 자동으로 처리합니다. 응용 프로그램이 준비된 문을 독점적으로 사용하는 경우 개발자는 SQL 삽입 이 발생하지 않을 것이라고 확신 할 수 있습니다. 그러나 쿼리의 다른 부분이 이스케이프 처리되지 않은 입력으로 으로 작성되는 경우 SQL 주입이 여전히 가능합니다.

참조 : 당신은 (아마도) 이스케이프 입력하여 쿼리를 구축하고 Prepared statements and stored procedures

. 그것은 모두 $for_example이 안전한지 여부에 달려 있습니다 ...

그러므로 제 제안은 준비 문에 매개 변수로 $for_example을 포함하는 것입니다.

+0

'$ for_example'은 세션 변수입니다. – mwaseema

+0

하지만 사용자 입력인가요? –

+0

사용자가 로그인 한 경우 데이터베이스에서 왔습니다. – mwaseema

관련 문제