mysql_real_escape_string() には致命的な欠陥がありますか?
信頼性が低いと言われているにもかかわらず、mysql_real_escape_string() は独自のプリペアド ステートメントを作成するための貴重なツールであり続けます。ここではその機能の内訳とその効果的な使用方法について説明します。
mysql_real_escape_string() の説明
MySQL C API ドキュメントには次のように記載されています。接続のセットを実行するには、SET NAMES (またはSET CHARACTER SET) ステートメント。"
これは、mysql_real_escape_string() を正しく利用するには、mysql_set_charset() を使用する必要があることを意味します。 PHP の mysql_set_charset() は、MySQL の mysql_set_character_set() をミラーリングします。
証明コード
<?php $mysqli = new mysqli("localhost", "username", "password", "database"); // Set the character set using mysql_set_charset() $mysqli->set_charset("utf8mb4"); // Prepared statement using mysql_real_escape_string() $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt->bind_param('s', mysql_real_escape_string($_GET['username'])); $stmt->execute(); ?>
この例では、mysql_set_charset() は、接続で utf8mb4 文字セットが使用されていることを確認します。これにより、mysql_real_escape_string() は、SQL インジェクションに対して脆弱になる可能性のある文字を適切に処理できるようになります。
結論
mysql_real_escape_string() の制限を理解することが重要ですが、次のように使用します。 mysql_set_charset() と組み合わせて使用すると、独自のプリペアド ステートメントを効果的に作成できます。これらの手順を実行することで、SQL インジェクションのリスクを軽減し、アプリケーションのセキュリティを維持できます。
以上が「mysql_real_escape_string()」には本当に欠陥があるのでしょうか、それとも単に誤解されているのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。