PHP の addslashes()
と SQL インジェクション: マルチバイト文字の脆弱性分析
PHP SQL クエリでユーザー入力を保護するには mysql_real_escape_string
が推奨される方法ですが、addslashes()
の制限を理解することが重要です。 この関数は、特定の条件下では、アプリケーションが SQL インジェクション攻撃を受けやすくなる可能性があります。
addslashes()
の弱点
addslashes()
の主な弱点は、マルチバイト文字の処理が不適切であることに起因します。 マルチバイト文字シーケンス内に一重引用符または二重引用符が存在する場合、addslashes()
は引用符の前にバックスラッシュを付けます。 ただし、このバックスラッシュが有効なマルチバイト文字に統合されると、エスケープ機能が損なわれます。
これにより、攻撃者はバックスラッシュとそれに続く引用符を組み込んだマルチバイト文字を含む悪意のある入力を作成できます。これにより、意図されたエスケープ メカニズムが巧みにバイパスされ、引用符が SQL インジェクション コマンドの開始ポイントとして機能できるようになります。
効果的な緩和戦略
この脆弱性を効果的に防止するには、SQL クエリ向けのユーザー入力をサニタイズするために addslashes()
を使用することを完全に避けてください。 代わりに、マルチバイト文字を管理し、SQL インジェクションの脅威を効果的に無効化するように特別に設計された mysql_real_escape_string
(またはセキュリティをさらに強化するためのプリペアド ステートメントと同等のもの) を一貫して使用してください。
重要なポイント
addslashes()
は、入力サニタイズ用の非推奨の関数です。 安全な PHP アプリケーションを構築するには、その脆弱性を認識することが不可欠です。 mysql_real_escape_string
などのより安全な代替手段、そして理想的にはプリペアド ステートメントを採用することで、開発者は SQL インジェクション攻撃が成功するリスクを大幅に軽減できます。
以上がPHP のaddslashes() は、特にマルチバイト文字の場合、SQL インジェクションに対して本当に安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。