ホームページ >バックエンド開発 >PHPチュートリアル >addslashes() は PHP における SQL インジェクション攻撃に対する信頼性の高い防御手段ですか?
addslashes() による SQL インジェクションを理解する
PHP では、SQL インジェクションに対するセキュリティ対策として、addslashes() が mysql_real_escape_string とよく比較されます。どちらもデータの保護に役立ちますが、addslashes() が悪用を許可する可能性があることを例で示しています。
攻撃が発生する可能性がある方法の 1 つは、addslashes() を操作してマルチバイト文字にバックスラッシュを組み込むことです。その結果、バックスラッシュの保護的な役割が無力化され、悪意のあるクエリが作成される可能性があります。
たとえば、addslashes() を使用した次のクエリを考えてみましょう。
$query = "SELECT * FROM users WHERE name = '" . addslashes($_GET['name']) . "'";
攻撃者は次のクエリを渡す可能性があります。 「name」パラメータとして次の値を指定します:
'John Doe' OR 1 = 1 --
通常、一重引用符はaddslashes()によってエスケープされます。ただし、この場合、攻撃者はマルチバイト文字「Ö」を利用します。 「Ö」を UTF-8 でエンコードすると、0xC3、0xB6、0x9C の 3 バイトで構成されます。
Addslashes() は、攻撃者の入力を次のように解釈します。
'John Doe' ÖR 1 \= 1 --
マルチバイト文字内にバックスラッシュを配置すると、addslashes() はそれを文字ではなく文字の継続として扱います。エスケープ記号。その結果、SQL クエリが適切にエスケープされず、攻撃者がセキュリティ対策を回避できるようになります。
このタイプの攻撃は、0x5c (バックスラッシュ文字) で終わるマルチバイト文字が存在する文字エンコーディングにのみ適用されることに注意することが重要です。 )。ただし、UTF-8 はこれに準拠していないため、この特定の攻撃ベクトルに対する脆弱性が低くなります。
以上がaddslashes() は PHP における SQL インジェクション攻撃に対する信頼性の高い防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。