mysql_real_escape_string() の整合性の評価
SQL インジェクション攻撃からデータベース クエリを保護する際の mysql_real_escape_string() の信頼性に関して懸念が提起されています。批評家は、適切な保護を提供する関数の能力に潜在的な欠陥があることを示唆する古い記事を参照しています。
MySQL のドキュメント
mysql_real_escape_string() の MySQL C API ドキュメントは、この懸念を認めています。
If you need to change the character set of the connection, you should use the mysql_set_character_set() function rather than executing a SET NAMES (or SET CHARACTER SET) statement. mysql_set_character_set() works like SET NAMES but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not.
PHP の対応物
PHP では、mysql_set_charset() は MySQL の mysql_set_character_set() と同様の方法で機能し、PHP の対応物として機能します。
Proofcode
<?php $str = "'mystring'"; // Set encoding mysql_set_charset('utf8'); // Escape string with correct encoding $escaped_str = mysql_real_escape_string($str);
mysql_real_escape_string() を使用する前に、mysql_set_charset() を利用してエンコーディングを変更することで、文字セットが正しく設定され、関数が意図したとおりに動作することを保証します。これにより、潜在的な脆弱性に関する懸念が解決され、mysql_real_escape_string() が SQL インジェクション攻撃から効果的に保護できるようになります。
以上がmysql_real_escape_string() は依然として SQL インジェクションに対する信頼できる保護ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。