mysql_real_escape_string() は壊れていますか?より深い分析
広く使用されているにもかかわらず、SQL インジェクション攻撃の防止における mysql_real_escape_string() の有効性に関していくつかの懸念が提起されています。この記事では、これらの主張を調査し、この関数の制限と代替案を検討します。
mysql_real_escape_string() の欠陥
mysql_real_escape_string() に関する懸念は、現在の関数への依存性に起因しています。 MySQL 接続の文字セット。この依存関係は、キャラクタ セットが適切に構成されていない場合、またはクエリの実行中に変更された場合に脆弱性を引き起こす可能性があります。
MySQL のドキュメントには、mysql_real_escape_string() で使用されるキャラクタ セットは mysql_set_character_set() によって制御されると明示的に記載されています。 )。 SET NAMES または SET CHARACTER SET ステートメントを使用して文字セットを設定しても、mysql_real_escape_string() で使用される文字セットには影響しません。
証明コード
次のコードは脆弱性を示しています。 :
mysql_set_charset('latin1'); $escaped_string = mysql_real_escape_string("'@CHARACTER SET utf8");
この例では、mysql_set_charset() は接続文字セットを「latin1」に設定します。ただし、mysql_real_escape_string() 関数は、文字セットが 'utf8' であるかのように文字列をエスケープします。
mysql_real_escape_string() の代替
これらの制限を考慮すると、 SQL インジェクション保護のために mysql_real_escape_string() のみに依存することは避けることをお勧めします。代わりに、次の代替手段の使用を検討してください:
結論
mysql_real_escape_string() は文字列をエスケープするための有効なメソッドであり続けますが、次のことが重要です。その制限を認識し、SQL インジェクション攻撃を防ぐために追加のセキュリティ対策を講じてください。これらの欠陥を理解し、軽減することで、開発者は MySQL アプリケーションを悪意のある入力から効果的に保護できます。
以上が「mysql_real_escape_string()」は SQL インジェクションに対して本当に効果的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。