mysql_real_escape_string: 制限と使用法
概要
mysql_real_escape_string は、多くの場合、 SQL インジェクションには特定の制限があります。
正しい使用法と制限事項
mysql_real_escape_string は、SQL ステートメントの引用符内の値として使用されるテキスト コンテンツをエスケープすることを目的としています。引用符で囲まれていない値や SQL ステートメント全体など、不適切に適用すると、インジェクションのリスクが生じる可能性があります。
無効またはエスケープ不可能な値
数値および引用符で囲まれていない入力は効果的に使用できません。 mysql_real_escape_string を使用してエスケープしました。数値の場合は、適切な型にキャストすることをお勧めしますが、引用符で囲まれていない入力はクエリ内で文字列として処理する必要があります。
間違った使用例
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
これこの例では、入力に「5 OR 1=1」が含まれている場合、SQL インジェクションから保護されません。クエリでは文字列が予期されている場合でも、エスケープ時には入力を数値として扱います。適切な処理には、エスケープされた入力を引用符で囲むことが含まれます。
微妙な脆弱性
別の潜在的な問題は、mysql_query("SET NAMES 'utf8'", $link) を使用してmysql_set_charset('utf8', $link) ではなくデータベース接続エンコーディングを設定します。これにより、クライアント API の想定されたエンコーディングとデータベースの解釈の間に不一致が生じ、マルチバイト文字列によるインジェクションの脆弱性が発生する可能性があります。
結論
mysql_real_escape_string には、特に次の点で基本的な制限があります。正しい使用法を保証します。その意図された目的を理解し、誤って適用しないようにすることが重要です。 SQL インジェクションに対する保護を強化するには、プリペアド ステートメントなどの、より安全な代替方法の使用を検討してください。
以上がmysql_real_escape_string は SQL インジェクションを防ぐのに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。