ホームページ >データベース >mysql チュートリアル >mysql_real_escape_string は SQL インジェクションに対して本当に効果的ですか? またその制限は何ですか?
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 サイトの他の関連記事を参照してください。