ホームページ >バックエンド開発 >PHPチュートリアル >PHP の「addslashes()」は SQL インジェクション攻撃を防ぐのに十分ですか?
addslashes() による SQL インジェクションの脆弱性
PHP では、addlashes() 関数を使用して文字列内の特殊文字をエスケープします。ただし、この関数は SQL インジェクション攻撃に対して脆弱であることが知られています。
例 1
次の SQL ステートメントを考えてみましょう:
SELECT * FROM users WHERE username = '$username'
$username 変数に一重引用符 (') が含まれている場合、攻撃者は次のような値を送信することでこの脆弱性を悪用する可能性があります。 as:
admin' OR 1=1
これにより、次の SQL ステートメントが生成されます:
SELECT * FROM users WHERE username = 'admin'' OR 1=1'
addslashes() 関数は一重引用符文字をエスケープしますが、スペース文字はエスケープしません。その結果、SQL ステートメントが意図したとおりに実行され、攻撃者は管理者アカウントにアクセスできるようになります。
例 2
別の例addslashes() による SQL インジェクションの脆弱性には、0x5c (バックスラッシュ) で終わるマルチバイト文字の使用が含まれます。これにより、addslashes() 関数が後続の一重引用符をエスケープする代わりに有効なマルチバイト文字を作成する可能性があります。
SELECT * FROM users WHERE username = '$username'
$username 変数に次のマルチバイト文字が含まれている場合:
"\x5c'"
addslashes() 関数はバックスラッシュ文字をエスケープしますが、単一引用符文字はエスケープしません。これにより、次の SQL ステートメントが生成されます。
SELECT * FROM users WHERE username = "\x5c'\x27"
SQL ステートメントは意図したとおりに実行され、攻撃者はデータベースにアクセスできるようになります。
結論
SQL インジェクション攻撃を防ぐために addslashes() 関数を使用しないでください。代わりに、開発者は mysql_real_escape や PDO::quote などのより安全な関数を使用する必要があります。
以上がPHP の「addslashes()」は SQL インジェクション攻撃を防ぐのに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。