ホームページ >データベース >mysql チュートリアル >mysql_real_escape_string は SQL インジェクションに対して本当に効果的ですか? またその制限は何ですか?

mysql_real_escape_string は SQL インジェクションに対して本当に効果的ですか? またその制限は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 00:19:10463ブラウズ

Is mysql_real_escape_string Truly Effective Against SQL Injection, and What Are Its Limitations?

mysql_real_escape_string: 潜在的な落とし穴

SQL インジェクション攻撃から保護することを目的とした mysql_real_escape_string 関数は、その制限のために精査されています。セキュリティを強化できますが、特定の欠点がその有効性を妨げます。

不正な使用法と数値

重要な問題の 1 つは、mysql_real_escape_string の不正な適用です。これは、SQL クエリ内の文字列値をエスケープするためだけに設計されています。ただし、例:

mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));

のように数値に適用すると、次のような攻撃を防ぐことができません:

5 OR 1=1

引用符で囲まれていない文字列の挿入

mysql_real_escape_string が以下で使用される場合、別の脆弱性が発生します。 scenario:

$sql = "... `foo` = $value ...";

ここでは、適切なエスケープと引用符なしで入力が挿入されているため、SQL インジェクション攻撃が可能です。同様に、次のような変数に適用すると、

$sql = "... `$value` ...";

脆弱性は残ります。

データベース接続エンコーディングの競合

さらに、 mysql_ API とデータベースに設定されているエンコーディングによって脆弱性が生じる可能性があります。

mysql_query("SET NAMES 'utf8'", $link);

などの間違った方法を使用してデータベース エンコーディングを設定すると、文字列のエスケープで不一致が発生し、インジェクション攻撃の可能性が生じる可能性があります。

結論

mysql_real_escape_string は SQL インジェクション攻撃に対してある程度の保護を提供できますが、その用途は狭く、不正なアプリケーションの影響を受けやすいため、あまり望ましくないオプションです。セキュリティをより堅牢にするために、開発者は、脆弱性に対する保護を強化する準備済みステートメントなどの代替方法を検討することをお勧めします。

以上がmysql_real_escape_string は SQL インジェクションに対して本当に効果的ですか? またその制限は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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