>데이터 베이스 >MySQL 튜토리얼 >PDO 준비 문으로 MySQL 주입을 방지하는 방법: `mysql_real_escape_string()`과 동일한 PDO가 있습니까?

PDO 준비 문으로 MySQL 주입을 방지하는 방법: `mysql_real_escape_string()`과 동일한 PDO가 있습니까?

DDD
DDD원래의
2024-10-26 07:58:031005검색

How to Prevent MySQL Injection with PDO Prepared Statements: Is There a PDO Equivalent to `mysql_real_escape_string()`?

mysql_real_escape_string()과 동등한 PDO

mysql_*에서 PDO로의 코드 마이그레이션에서 mysql_real_escape_string()과 동등한 PDO를 찾고 있습니다. 그러나 PDO에는 직접적으로 동등한 것이 없다는 점에 유의하는 것이 중요합니다.

기술적으로 PDO::quote()가 존재하지만 일반적으로 사용되지 않으며 mysql_real_escape_string()과 비교할 수 없습니다.

적절한 MySQL 주입 예방

PDO를 준비된 명령문과 함께 적절하게 사용하면 MySQL 주입으로부터 보호받을 수 있습니다. 준비된 문은 입력을 삭제하여 mysql_real_escape_string()과 같은 함수의 필요성을 제거합니다.

준비된 문을 사용한 보안 데이터베이스 쿼리의 예

다음은 보안 데이터베이스의 예입니다. PDO 준비된 문을 사용한 쿼리:

$db = new PDO(
    "mysql:host=localhost;dbname=xxx;charset=utf8",
    "xxx",
    "xxx",
    [
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

// Prepared statement
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");

// Execute statement
$stmt->execute(array($_POST['color']));

// Fetch result
$cars = $stmt->fetchAll(PDO::FETCH_ASSOC);

보시다시피 $_POST['color']를 이스케이프하거나 삭제하지 않았지만 코드는 PDO 및 강력한 기능 덕분에 MySQL 주입으로부터 안전하게 유지됩니다. 준비된 문입니다.

추가 참고 사항

  • 보안을 위해 항상 DSN에 charset=utf8을 전달하세요.
  • 오류를 예외로 표시하려면 PDO를 활성화하세요. 더 나은 오류 처리를 위해.
  • 오래된 MySQL 버전(<= 5.3.6)의 경우 MySQL 주입 방지를 위해 추가적인 예방 조치가 필요할 수 있습니다.

결론

위에서 설명한 대로 준비된 문을 사용하는 것이 mysql_* 함수를 사용하는 것보다 항상 더 안전합니다. PDO에 내장된 보호 메커니즘은 MySQL 주입을 방지하는 보다 강력하고 안전한 접근 방식을 제공합니다.

위 내용은 PDO 준비 문으로 MySQL 주입을 방지하는 방법: `mysql_real_escape_string()`과 동일한 PDO가 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.