ホームページ  >  記事  >  バックエンド開発  >  「mysql_real_escape_string」は SQL インジェクションに対する信頼できる防御手段ですか?

「mysql_real_escape_string」は SQL インジェクションに対する信頼できる防御手段ですか?

DDD
DDDオリジナル
2024-10-26 05:00:31714ブラウズ

Is `mysql_real_escape_string` a Reliable Defense Against SQL Injection?

mysql_real_escape_string の欠点

mysql_real_escape_string は SQL インジェクション攻撃を防ぐために入力データをフィルタリングする形式を提供しますが、その制限には注意が必要です。

クエリの連結:
前述したように、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 によって提供される安全保護をバイパスする可能性があります。

狭いスコープ:
mysql_real_escape_string は、SQL ステートメントの引用符で囲まれた文字列内に含めることを目的とした文字列値を変更するために特別に設計されています。

$value = mysql_real_escape_string($value, $link);
$sql = "... `foo` = '$value' ...";

この狭いコンテキスト外で使用すると、mysql_real_escape_string が誤って動作する可能性があります。構文エラーや XSS の脆弱性が発生します。

文字セットの不一致:
データベース接続エンコーディングを正しく設定しないと、脆弱性が発生する可能性があります。 mysql_query("SET NAMES 'utf8'", $link) を使用して文字エンコーディングを設定すると、mysql_ API が文字列を処理する方法とデータベースが文字列を解釈する方法の間に矛盾が生じる可能性があります。

間違った実装:
mysql_real_escape_string は、次のような誤った使用法をする傾向があります。

  • 引用符で囲まれていない値に適用する
  • SQL クエリ自体に含める
  • プリペアド ステートメントの代替として誤解する

mysql_real_escape_string は、正しく使用するとインジェクション攻撃に対する保護を提供できますが、包括的な安全性を確保するには、プリペアド ステートメントなどのより堅牢な技術を採用することをお勧めします。 🎜>

以上が「mysql_real_escape_string」は SQL インジェクションに対する信頼できる防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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