mysql_real_escape_string() は SQL インジェクションから完全に保護されていますか?
最近、mysql_real_escape_string() は特定のアジアの文字エンコーディングでバイパスできるという主張が広まりました。 、具体的には Big5 と GBK です。この主張は有効ですか? もし有効である場合、プリペアド ステートメントに頼らずに Web サイトを保護するにはどうすればよいですか?
脆弱性
Stefan Esser によると、mysql_real_escape_string() SET NAMES コマンドの使用時に脆弱性が存在します。このコマンドは文字エンコーディングを変更し、追加バイトとしてバックスラッシュを使用する特定のマルチバイト エンコーディングを mysql_real_escape_string() に無視させます。この誤ったエスケープにより、Web サイトのセキュリティが危険にさらされる可能性があります。
安全対策
UTF-8 エンコードはこのエクスプロイトの影響を受けませんが、エンコードを安全に変更するには mysql_set_charset を使用することが不可欠です。 。ただし、この関数は新しい PHP バージョンでのみ使用できます。プリペアド ステートメントまたは mysql_set_charset を使用できない場合は、Web サイトを SQL インジェクション攻撃から保護するための代替方法を検討する必要がある場合があります。
以上が「mysql_real_escape_string()」は本当に安全ですか: アジアの文字エンコーディングはその保護を回避できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。