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 は、次のような誤った使用法をする傾向があります。
mysql_real_escape_string は、正しく使用するとインジェクション攻撃に対する保護を提供できますが、包括的な安全性を確保するには、プリペアド ステートメントなどのより堅牢な技術を採用することをお勧めします。 🎜>
以上が「mysql_real_escape_string」は SQL インジェクションに対する信頼できる防御手段ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。