SQL インジェクションからの保護: mysql_real_escape_string() の制限
mysql_real_escape_string() は SQL インジェクションを防ぐために一般的に使用されますが、プリペアドステートメントを使用しない Web サイトでは、特定のアジア文字エンコーディングを使用してバイパスできると主張しました。
バイパスの問題
Justin Shattuck によると、バイパスは次のとおりです。 Big5 または GBK 文字エンコーディングの文字を使用することで可能になります。これらのエンコーディングではバックスラッシュを 2 番目以上のバイトとして表現できるため、mysql_real_escape_string() が混乱してバックスラッシュを適切にエスケープできなくなる可能性があります。
Stefan Esser の説明
Stefan Esser 氏この脆弱性は、mysql_real_escape_string() が、エンコーディングを切り替える可能性がある SET NAMES を通じて行われた変更を認識しないために発生します。マルチバイト エンコーディングが使用される場合、バックスラッシュは複数バイトとして表現される可能性があり、エスケープ プロセスがバイパスされる可能性があります。
UTF-8 は安全ですか?
Esser は次のように述べています。 UTF-8 は、どのバイト位置でもバックスラッシュを正しく処理するため、この問題の例外です。ただし、エンコードを変更するには、より安全で新しいオプションである mysql_set_charset を使用することをお勧めします。
推奨事項
SQL インジェクションから完全に保護するには、prepared を使用することをお勧めします。ステートメントは、このバイパスの問題の影響を受けません。プリペアドステートメントがオプションでない場合は、次の点を考慮する必要があります:
以上がmysql_real_escape_string() は本当に安全ですか?アジアの文字エンコーディングの潜在的な落とし穴。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。