ホームページ >データベース >mysql チュートリアル >`addslashes()` は本当に SQL インジェクションから保護しますか? 代わりに `mysql_real_escape_string()` を使用する必要があるのはなぜですか?
addslashes()
と mysql_real_escape_string()
の比較
addslashes()
のより安全な代替手段としてよく宣伝されていますが、mysql_real_escape_string()
は依然として PHP アプリケーションの SQL インジェクションの脆弱性を防ぐために推奨される方法です。 addslashes()
の制限を理解することが、堅牢なセキュリティを構築する鍵となります。
これについて考えてみましょう。SQL クエリは、ユーザー入力のサニタイズに addslashes()
に依存しており、一重引用符 (') を含む文字列を検出します。 addslashes()
は、この引用符をマルチバイト文字の一部として誤って識別し、クエリがインジェクションの影響を受けやすくなる可能性があります。
攻撃者は、特定の Unicode エンコード (ISO-8859-1 など、UTF-8 は除く) でマルチバイト シーケンスを終了するハイフン (-) または同様の文字を追加することで、これを悪用できます。これにより、addslashes()
が単一引用符を有効なマルチバイト文字の一部として扱うように仕向けられ、エスケープ メカニズムがバイパスされ、悪意のあるコードの実行が可能になります。
この脆弱性はエンコーディングに固有です。広く使用されている Unicode エンコーディングである UTF-8 は、同じマルチバイト終了文字を使用しないため、通常、この特定の攻撃に対して安全です。
最適な SQL インジェクション保護を実現するには、常に mysql_real_escape_string()
よりも addslashes()
を優先してください。 これをアプリケーションレベルの入力検証と、データベース対話用のプリペアドステートメントの使用で補足します。 addslashes()
の弱点を認識し、これらのベスト プラクティスを実装することで、開発者は SQL インジェクション攻撃のリスクを大幅に軽減できます。
以上が`addslashes()` は本当に SQL インジェクションから保護しますか? 代わりに `mysql_real_escape_string()` を使用する必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。