アジアのエンコーディングを使用した SQL インジェクションに対する mysql_real_escape_string() のセキュリティの評価
質問:
次のようなセキュリティ上の脆弱性が報告されています。 mysql_real_escape_string() は、BIG5 や GBK などの特定のアジアの文字エンコーディングを使用してバイパスできます。この脆弱性は有効ですか?もし有効である場合、プリペアド ステートメントを使用せずにどのように軽減できますか?
回答:
PHP 開発者の Stefan Esser 氏によると、mysql_real_escape_string( ) は、特定のエンコード設定が有効な場合、SQL インジェクションに対して完全に安全ではありません。
説明:
この問題は、SET NAMES コマンドを使用してデータベースの文字エンコーディングを変更するときに発生します。このエンコードの変更は、バックスラッシュ () などの特殊文字のエスケープ方法に影響します。 Mysql_real_escape_string() はデフォルトのエンコーディングを想定し、それに応じてエスケープ ロジックを調整しません。
したがって、攻撃者が後続のバイトとしてバックスラッシュを許可するエンコーディングを使用する場合、mysql_real_escape_string() はこれらの文字を適切にエスケープできない可能性があります。これにより、SQL インジェクション攻撃が成功する可能性があります。
緩和策:
プリペアド ステートメントが使用できない場合にこの脆弱性を解決するには、
以上がmysql_real_escape_string() はアジアのエンコーディングによる SQL インジェクションに対して脆弱ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。