ホームページ >バックエンド開発 >PHPチュートリアル >mysql_real_escape_string() は本当に SQL インジェクション攻撃を防ぐことができるのでしょうか?

mysql_real_escape_string() は本当に SQL インジェクション攻撃を防ぐことができるのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 20:32:09382ブラウズ

Can mysql_real_escape_string() Really Prevent SQL Injection Attacks?

SQL インジェクションによる mysql_real_escape_string() の回避

広く信じられているにもかかわらず、SQL インジェクションで mysql_real_escape_string() セーフガードをバイパスすることが可能です。この機能は通常、このような攻撃から保護するために利用されているため、これは特に懸念されます。

エクスプロイト

この脆弱性を示す攻撃については、元の投稿で概要が説明されています。重要なのは、特定の文字セット (gbk など) と組み合わせて特定の文字シーケンス (「xbfx27」) を利用することです。これらの条件下で mysql_real_escape_string() によって処理されると、ペイロードはエスケープされていない ' 文字となり、インジェクション目的で悪用される可能性があります。

影響

この脆弱性mysql_real_escape_string() の普及を考えると、広範囲にわたる影響を及ぼします。 SQL インジェクションに対する防御メカニズム。この問題は、mysql_ または PDO_MySQL 拡張機能を使用する PHP アプリケーション、特に脆弱な文字セットが使用されている場合、または PDO のエミュレートされたプリペアド ステートメントに依存している場合に影響します。

安全な方法

これを軽減するには脆弱性があるため、最善を尽くすことが不可欠です実践方法:

  • mysql_real_escape_string() バグの影響を受けない MySQL バージョン (5.1.20、5.0.22、または 5.1.11) に移行します。
  • 脆弱性のないものを使用します。接続エンコーディングの文字セット (例: utf8、 utf8mb4).
  • PDO でエミュレートされたプリペアド ステートメントを無効にします (PDO::ATTR_EMULATE_PREPARES)。
  • PDO の DSN charset パラメーターを利用して、PHP 5.3.6 以降で接続エンコーディングを正しく設定します。
  • PDO または MySQLi で真の準備済みステートメントを使用することを検討してください。

これらのガイドラインに従うことで、データベース アプリケーションのセキュリティを強化し、mysql_real_escape_string() 関数をバイパスしようとする SQL インジェクション攻撃から保護できます。

以上がmysql_real_escape_string() は本当に SQL インジェクション攻撃を防ぐことができるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。