「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 サイトの他の関連記事を参照してください。