mysql_real_escape_string の欠点を理解する
mysql_real_escape_string は SQL インジェクションの防止に推奨されることがよくありますが、アプリケーションを脆弱なままにする可能性のある制限があります。この記事では、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));
限定的な適用性
mysql_real_escape_string のみを使用する必要があります。 SQL ステートメント内で文字列リテラルとして挿入された値をエスケープします。関数呼び出しや他の SQL 演算子で使用される値のエスケープなど、他のコンテキストでこれを使用しようとすると、予期しない動作や潜在的な脆弱性が発生する可能性があります。
有効なインジェクションの例
mysql_real_escape_string はほとんどのインジェクション攻撃から保護しますが、失敗する可能性のあるシナリオがいくつかあります。有効な注入の例の 1 つは、入力が関数呼び出し内で文字列リテラルとして渡される場合です。次のコードには脆弱性があります:
$query = "SELECT * FROM users WHERE name = '" . mysql_real_escape_string($input) . "'";
この場合、攻撃者はエスケープ メカニズムをバイパスし、悪意のある SQL コードを挿入する入力を提供する可能性があります。
代替アプローチ
制限を考慮すると、mysql_real_escape_string は SQL インジェクションに対する主な防御策として推奨されません。代わりに、プログラマは、パラメータ バインドと SQL クエリ構築のためのより堅牢で信頼性の高いメカニズムを提供するプリペアド ステートメントの使用を検討する必要があります。
以上が質問の形式と記事の焦点を考慮して、考えられるタイトルをいくつか示します。 オプション 1 (問題に直接対処する): * mysql_real_escape_string が十分ではない理由: 理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。