mysql_real_escape_string の制限
PHP の mysql_real_escape_string 関数は、SQL インジェクション攻撃に対する包括的な保護を提供していないとして批判されており、その可能性について疑問が生じています。欠点。関数の誤った使用が原因であると主張する人もいますが、その固有の制限について懸念を表明する人もいます。
使用制限
mysql_real_escape_string の主な問題の 1 つそれは、意図したとおりに正確に使用する必要があるということです。以下に示すように、SQL ステートメントの一重引用符内で使用することを目的としたテキスト値をエスケープするように設計されています。
$value = mysql_real_escape_string($value, $link); $sql = "... `foo` = '$value' ...";
引用符の外側で使用される値をエスケープするために使用する場合など、他のコンテキストで mysql_real_escape_string を適用する。脆弱性につながる可能性があります。
回避の例mysql_real_escape_string
mysql_real_escape_string をバイパスできる攻撃の例は、数値をエスケープするために使用される場合に発生します。次のクエリについて考えてみましょう:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
入力が "5 OR 1=1" の場合、クエリは次のようになります:
DELETE FROM users WHERE user_id = 5 OR 1=1
このクエリは、" としてすべてのユーザーを削除します。 OR 1=1」条件は常に true です。この攻撃は、コンテキストに応じて正しいデータ型とエスケープ方法を使用することの重要性を示しています。
エンコーディングの不正な処理
mysql_real_escape_string に関するもう 1 つの潜在的な落とし穴は、文字に関連しています。エンコーディング。データベース接続エンコーディングが正しく設定されていない場合、mysql_real_escape_string が文字列をエスケープする方法とデータベースが文字列を解釈する方法の間に不一致が生じる可能性があります。この矛盾により、特定の状況下、特にマルチバイト文字列を扱う場合に脆弱性が生じる可能性があります。
結論
mysql_real_escape_string は正しく使用すれば効果的なツールですが、その制限と誤用のリスクがあるため、SQL インジェクション攻撃を防止するオプションの信頼性が低くなります。プリペアド ステートメント、パラメータ化されたクエリ、またはインジェクションの脆弱性に対してより堅牢な保護を提供する、より最新のデータベース API などの代替アプローチを使用することをお勧めします。
以上がmysql_real_escape_string は SQL インジェクション攻撃に対して本当に安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。