ホームページ > データベース > mysql チュートリアル > mysql_real_escape_string() はアジアのエンコーディングによる SQL インジェクションに対して脆弱ですか?

mysql_real_escape_string() はアジアのエンコーディングによる SQL インジェクションに対して脆弱ですか?

Mary-Kate Olsen
リリース: 2024-11-27 22:54:10
オリジナル
744 人が閲覧しました

Is mysql_real_escape_string() Vulnerable to SQL Injection with Asian Encodings?

アジアのエンコーディングを使用した 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 インジェクション攻撃が成功する可能性があります。

緩和策:

プリペアド ステートメントが使用できない場合にこの脆弱性を解決するには、

  1. を使用します。 mysql_set_charset() 関数を使用して、SET NAMES に依存する代わりにデータベースの文字エンコーディングを明示的に設定します。これにより、mysql_real_escape_string() が正しいエンコーディング情報で動作することが保証されます。
  2. SQL インジェクションでの誤用を防ぐ方法でバックスラッシュを処理する、UTF-8 などの安全なエンコーディングに切り替えます。

以上がmysql_real_escape_string() はアジアのエンコーディングによる SQL インジェクションに対して脆弱ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート