「mysql_real_escape_string()」は SQL インジェクションに対して本当に効果的ですか?

Mary-Kate Olsen
リリース: 2024-11-09 13:10:02
オリジナル
991 人が閲覧しました

Is `mysql_real_escape_string()` Really Effective Against SQL Injection?

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() のみに依存することは避けることをお勧めします。代わりに、次の代替手段の使用を検討してください:

  • プリペアド ステートメント: PHP の PDO または mysqli 機能を使用して、クエリを実行するためのプリペアド ステートメントを生成します。
  • Characterセット操作: mysql_set_charset() を使用して正しい文字セットが設定されていること、およびクエリの実行中に変更されないことを確認します。
  • 検証とフィルタリング: 入力検証とフィルタリングを実装します。

結論

mysql_real_escape_string() は文字列をエスケープするための有効なメソッドであり続けますが、次のことが重要です。その制限を認識し、SQL インジェクション攻撃を防ぐために追加のセキュリティ対策を講じてください。これらの欠陥を理解し、軽減することで、開発者は MySQL アプリケーションを悪意のある入力から効果的に保護できます。

以上が「mysql_real_escape_string()」は SQL インジェクションに対して本当に効果的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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