ホームページ >バックエンド開発 >PHPチュートリアル >PHP の「addslashes()」は SQL インジェクション攻撃を防ぐのに十分ですか?

PHP の「addslashes()」は SQL インジェクション攻撃を防ぐのに十分ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-01 12:12:13176ブラウズ

Is `addslashes()` in PHP Sufficient to Prevent SQL Injection Attacks?

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 サイトの他の関連記事を参照してください。

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