ホームページ >データベース >mysql チュートリアル >「mysql_real_escape_string()」を使用しても SQL インジェクションは発生しますか?

「mysql_real_escape_string()」を使用しても SQL インジェクションは発生しますか?

DDD
DDDオリジナル
2025-01-25 21:18:11540ブラウズ

Can SQL Injection Still Occur Even with `mysql_real_escape_string()`?

mysql_real_escape_string()を使用している場合でも、SQLインジェクションはまだ発生する可能性があります

一般に、mysql_real_escape_string()がSQL注入を防ぐことができると考えられていますが、特定の場合、SQL注入がまだ発生する可能性があります。次のことは、この攻撃がどのように起こったかを説明しています:

    文字セットの選択:
  1. サーバー文字セットを設定して、ASCIIバックスロープ(0x5C)と無効なマルチライン文字セット(GBKなど)を許可します。これは、set namesステートメントを介して実装できます。

    効果的な荷重構築:
  2. 0xBF27で始まる効果的な負荷を作成します。指定された文字セット(たとえば、GBK)では、これはラテン語で0x27(skimp)に変換される無効なマルチライン文字を意味します。

    • mysql_real_escape_string()操作:
  3. クライアントの偽造文字セット(LATIN1)ではなく、接続された文字セット(GBK)操作に基づいて、 0x5C27に有効にすることは効果的です。ただし、クライアントは依然としてLATIN1を使用していると考えているため、バックスラッシュ(0x5C)は依然として不採算です。
    • クエリ実行:
  4. レンダリングクエリには、正義の内容に準備ができていないスキマーが含まれており、注射攻撃が成功します。
  5. pdoおよびmysqliの脆弱性:
    PDOのアナログ前処理ステートメントのデフォルト使用。これは簡単に攻撃されます。
mysqliは、実際の前処理ステートメントを使用するため、影響を受けません。

対策を緩和する:

  • 非攻撃文字セットを使用してコーディングを接続します(たとえば、UTF8)。
  • mysql_set_charset() / pdo dsn文字セットパラメーターを正しく設定します。接続文字セットを正しく設定します。

PDOでのシミュレーション前処理ステートメントを無効にします。

次の条件が検証されています:
  • 正しい文字セット管理を備えた最新のmysqlバージョン
  • または非妨害文字セット
  • を使用します
  • この潜在的な抜け穴を減らすことができます。

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

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