ホームページ > バックエンド開発 > PHPチュートリアル > mysql_real_escape_string() はバイパスできますか?

mysql_real_escape_string() はバイパスできますか?

Barbara Streisand
リリース: 2025-01-04 13:16:40
オリジナル
782 人が閲覧しました

Can mysql_real_escape_string() Be Bypassed?

SQL インジェクションのバイパス mysql_real_escape_string()

SQL インジェクションを防ぐには mysql_real_escape_string() を使用するだけで十分であると広く信じられていますが、この防御をバイパスできるシナリオが存在します。 .

攻撃Vector

そのような攻撃の 1 つは、特定の条件の組み合わせを伴います:

  • 脆弱な文字エンコーディング (gbk、cp932 など) の使用
  • 接続文字セットの誤った設定クライアント上
  • 無効なマルチバイト文字が単一文字として扱われるエッジケースを悪用するエスケープするためのバイト数

攻撃プロセス

  1. データベース接続を確立し、サーバーの文字エンコーディングを脆弱なものに設定します (例: 'SET NAMES gbk')。
  2. 無効なマルチバイト文字シーケンスを含むペイロードを構築すると、シングルバイトとして誤って解釈されます。 ('xbfx27 OR 1=1 /*')。
  3. mysql_real_escape_string() を使用してペイロードを「エスケープ」します。これにより、アポストロフィの前にバックスラッシュが誤って挿入されます。
  4. 次を使用して SQL クエリを実行します。エスケープされたペイロードは、意図されたものを効果的にバイパスします

脆弱なシナリオ

この攻撃は、特に次のシナリオで懸念されます:

  • 4.1.20、5.0.22 より前の MySQL バージョンを使用している、または 5.1.11
  • 準備されたステートメントのエミュレーション5.3.6 より前のバージョンの PDO では

軽減戦略

この脆弱性を軽減するには、次のことが重要です:

  • MySQL バージョン 5.1 以降を使用する
  • を使用して接続文字セットを適切に設定します。 mysql_set_charset() または同等のもの
  • 5.3.6 より前の PDO バージョンでエミュレートされたプリペアド ステートメントを無効にする
  • utf8mb4 や utf8 などの脆弱性のない文字エンコーディングの使用を検討する

結論

しながらmysql_real_escape_string() は SQL インジェクションに対する重要な保護を提供しますが、絶対確実というわけではありません。データベース アプリケーションのセキュリティを確保するには、潜在的なバイパス メカニズムを理解し、対処することが重要です。

以上がmysql_real_escape_string() はバイパスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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