ホームページ >バックエンド開発 >PHPチュートリアル >「mysqli_real_escape_string」は SQL インジェクションに対する完全な保護を提供しますか?

「mysqli_real_escape_string」は SQL インジェクションに対する完全な保護を提供しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 03:02:13643ブラウズ

Does `mysqli_real_escape_string` Offer Complete Protection Against SQL Injection?

「mysqli_real_escape_string」は SQL インジェクションを完全に防止できますか?

次のコード例を考えてみましょう:

$email = mysqli_real_escape_string($db_con, $_POST['email']);
$psw = mysqli_real_escape_string($db_con, $_POST['psw']);

$query = "INSERT INTO `users` (`email`,`psw`) 
           VALUES ('" . $email . "','" . $psw . "')";

このコードは SQL インジェクションなどに対して安全ですか?

答え: いいえ。

提供されたコード例で強調されているように、"mysqli_real_escape_string" だけでは SQL インジェクションに対する保護を保証するには不十分です。 。攻撃者は実装の脆弱性を悪用してフィルタリングをバイパスし、アプリケーションを侵害する可能性があります。

推奨される解決策:

SQL インジェクションを防ぐ最も効果的な方法は、を使用することです。準備されたステートメント。プリペアド ステートメントは SQL クエリからデータを分離し、外部入力がクエリ構造に干渉しないようにします。さらに、厳密なホワイトリストを実装して、意図された目的に特化してデータをフィルタリングすることを検討してください。このアプローチにより、SQL インジェクションやその他のセキュリティ脆弱性のリスクが最小限に抑えられます。

プリペアド ステートメントを使用した安全なクエリの例:

$stmt = $db->prepare(
    "SELECT * FROM table 
    WHERE col = ? ORDER BY {$sortby} ASC 
    LIMIT ?, ?"
);
$stmt->execute(['value', $start, $howmany]);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

これらの対策を組み込むことで、次のことが可能になります。悪意のある攻撃に対する SQL 操作のセキュリティを大幅に強化します。

以上が「mysqli_real_escape_string」は SQL インジェクションに対する完全な保護を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。