문제

나는 긴 형식을 통해 전송되는 $ _post 변수가 있습니다. mysql_escape_string() 다음을해도 괜찮습니까? 이것이 실제로 안전하고/또는 실행 가능한 코드인지 모르겠습니다.

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

나는 &를 사용하기 때문에 값이 아닌 참조로 전달하고 있기 때문에 실제로 $ _post의 값을 변경하고 있다고 확신합니다.

또한 사용해야합니다 mysql_real_escape_string() 대신에?

편집 : 위의 방법과 함께 PDO를 사용하고 ()을 사용하고 있습니다. 이것이 나를 위해 그것을 처리합니까?

도움이 되었습니까?

해결책

사용하지 않는 이유 array_map()?

array_map(mysql_real_escape_string, $_POST);

그러나 실제로 당신은 매개 변수화/준비된 진술을 사용해야합니다.

mysql_real_escape_string() 현재 데이터베이스 문자를 고려하여 mysql_escape_string() 하지 않습니다. 따라서 전자는 비교할 때 더 나은 대안입니다.

편집 (OP의 질문에 대한 편집 후) :

이미 PDO 준비된 진술을하고 있으므로 값을 수정할 필요가 없습니다. PDO는 모든 것을 처리합니다. 그것이 그 요점입니다.모든 데이터를 매개 변수로 넣는 경우 -SQL 문을 구축하기 위해 문자열을 연결하면 PDO가 있거나없는 재난으로 이어집니다). 값을 미리 도피하면 데이터베이스에서 값이도 피할 수 있습니다.

다른 팁

예, 당신은 사용해야합니다 mysql_real_escape_string(), 당신이 그 길을 가려고한다면. 그러나 변수가 데이터베이스로 보내는 것이 안전한 지 확인하는 올바른 방법은 사용 중입니다. 매개 변수화 쿼리 이것은 둘 중 하나를 통해 PHP로 제공됩니다 mysqli 기능 또는 pdo.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top