2009-04-17 6 views
1

$ _POST 변수 묶음을 긴 양식을 통해 보내고 각각을 mysql_escape_string()으로 하드 코딩하는 대신 다음 작업을 수행 할 수 있습니까? 이것이 실제로 안전하고 실행 가능한 코드인지 나는 모른다.적어도이 PHP 코드는 약간 안전합니까?

foreach ($_POST as &$post_item){ 
    $post_item = mysql_escape_string($post_item); 
} 

나는 내가 &을 사용하고 있기 때문에, 그것을 참조하지 값을 전달 있다고 확신한다, 그래서 실제로 $ _POST에서 값을 변경하고 있습니다.

또한 mysql_real_escape_string()을 사용해야합니까?

EDIT : 위의 방법과 함께 PDO를 사용하고 준비 중입니다. 이게 나를 위해 돌봐 줄거야?

+0

PHP5에서는 아무 것도 전달되지 않습니다. 모든 것은 참조로 전달됩니다. –

+0

사실 개체와 리소스는 기본적으로 참조로 전달됩니다. –

+1

PDO와 준비된 문을 사용하는 경우에는 mysql_real_escape_string을 전혀 사용하지 않아야합니다. – olle

답변

10

array_map()을 사용하지 않으시겠습니까?

array_map(mysql_real_escape_string, $_POST); 

그러나 실제로는 매개 변수화/준비 문을 사용해야합니다.

mysql_real_escape_string()은 현재 데이터베이스 문자 집합을 고려합니다 (mysql_escape_string()). 그래서 전자는 비교에서 더 나은 대안입니다. 이미 PDO가 제표를 작성 할 수 있으므로, 해당 값을 수정할 필요가

없습니다 : (질문에 대한 영업 이익의 편집을 다음)

편집. PDO가 모든 것을 처리합니다. () 실제로 모든 데이터를 매개 변수에 넣으면입니다. SQL 문을 작성하기 위해 연결 문자열을 사용하면 PDO가 있거나없는 경우 재앙이 발생합니다. 미리 값을 이스케이프하면 데이터베이스에서 이스케이프 된 값이됩니다.

3

예, 해당 경로로 이동하려면 mysql_real_escape_string()을 사용해야합니다. 그러나 변수가 데이터베이스로 전송하는 것이 안전한지 확인하는 올바른 방법은 mysqli 함수 또는 PDO을 통해 PHP에서 제공되는 Parameterized Queries을 사용하는 것입니다.

+0

편집보기, pdo를 사용 중입니다. – helloandre

1

매개 변수가있는 쿼리를 사용하는 또 다른 이점은 데이터베이스가 더 나은 최적화를 수행하고 캐시 된 쿼리 계획을 사용하여 더 나은 성능을 얻을 수 있다는 것입니다.

관련 문제