MySQL インジェクションと文字エスケープ
MySQL API の mysql_real_escape_string() 関数を使用する場合、すべての脆弱な文字がSQL インジェクションを防ぐためにエスケープされます。 MySQL のドキュメントでは、次の文字はエスケープする必要があると規定されています:
<pre class="brush:php;toolbar:false">0x00 : "\0", 0x08 : "\b", 0x09 : "\t", 0x1a : "\Z", 0x22 : '\"', 0x25 : "\%", 0x27 : "\'", 0x5c : "\\", 0x5f : "\_",
ただし、このリストを ESAPI の Python ポートと比較すると、次のような追加の文字がエスケープ対象として特定されます。
SELECT a FROM b WHERE c = '...user input ...';
バックスペース (b) およびタブレータ (t) 文字をエスケープする必要性に関して生じます。
クエリのアドレス指定
"\bDELETE_MY_DATABASE"
ユーザー入力にタブレータまたはバックスペースが含まれる場合文字を使用すると、セキュリティ上のリスクが生じる可能性があります。悪意のある攻撃者がユーザー入力の末尾に次の文字列を含むシナリオを考えてみましょう:
データベースに渡されると、バックスペース文字によって先行の一重引用符が消去され、悪意のある DELETE が実行されます。 query.
ESAPI セキュリティ ライブラリ
ESAPI セキュリティ ライブラリには、潜在的なセキュリティ問題のためエスケープするためのバックスペース文字とタブ文字が組み込まれています:
結論
したがって、MySQL クエリでユーザー入力を処理する場合は、注意して ESAPI のセキュリティ ライブラリで指定されているすべての文字をエスケープすることをお勧めします。バックスペースやタブレータなどの特定の文字は本質的に危険ではないように見えますが、他のメカニズムと組み合わせた影響は重大なセキュリティ上の脅威を引き起こす可能性があります。
以上がMySQL クエリでバックスペース文字とタブ文字をエスケープする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。