ホームページ >データベース >mysql チュートリアル >「mysql_real_escape_string()」は、すべての文字エンコーディングにおける SQL インジェクションに対する信頼できる防御手段ですか?
mysql_real_escape_string() は SQL インジェクションに対する鉄壁のシールドですか?
justinshattuck.com のセクションでは、mysql_real_escape_string() は特定の攻撃に対して誤謬を起こす可能性があると示唆されています。アジアの文字エンコーディング。具体的には、エンコーディングが BIG5 または GBK を使用して mysql_real_escape_string() をバイパスし、危険な文字をクエリに密輸していると主張しています。
この脆弱性は本物ですか?
Stefan Esser 氏によると、答えは当惑するような「はい」です。彼は、SET NAMES が使用されると mysql_real_escape_string() が動作しないと主張しています。このメソッドは、mysql_real_escape_string() に通知せずに、アプリケーションのニーズに合わせてエンコーディングを切り替えます。したがって、マルチバイトエンコーディングで 2 バイト目、3 バイト目、または 4 バイト目にバックスラッシュを使用できる場合、問題が発生します。 Mysql_real_escape_string() はこの不正に気付かず、文字を正しくエスケープできません。
Web サイトの保護
Esser は UTF-8 が引き続き安全なエンコーディングであると示唆していますが、UTF -8 は常にオプションであるとは限りません。残念ながら、より安全な代替手段である mysql_set_charset は、最近の PHP バージョンでのみ使用できます。
以上が「mysql_real_escape_string()」は、すべての文字エンコーディングにおける SQL インジェクションに対する信頼できる防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。