MySQLAPIの関数を使用しています
mysql_real_escape_string()
ドキュメントに基づいて、次の文字をエスケープします。
\0
\n
\r
\
'
"
\Z
ここで、OWASP.orgのESAPIセキュリティライブラリを調べたところ、Pythonポートに次のコードが含まれていました(http://code.google.com/p/owasp-esapi-python/source/browse/esapi/codecs/mysql。 py):
"""
Encodes a character for MySQL.
"""
lookup = {
0x00 : "\\0",
0x08 : "\\b",
0x09 : "\\t",
0x0a : "\\n",
0x0d : "\\r",
0x1a : "\\Z",
0x22 : '\\"',
0x25 : "\\%",
0x27 : "\\'",
0x5c : "\\\\",
0x5f : "\\_",
}
さて、これらすべてのキャラクターを本当にエスケープする必要があるのだろうかと思います。%と_が存在する理由は理解できますが、これらはLIKE演算子のメタ文字ですが、なぜバックスペースとタブ文字(\ b \ t)が追加されたのか簡単には理解できません。クエリを実行する場合、セキュリティの問題はありますか?
SELECT a FROM b WHERE c = '...user input ...';
ユーザー入力にタビュレーターまたはバックスペース文字が含まれている場合は?
私の質問はここにあります:なぜ彼らはESAPIセキュリティライブラリに\ b \ tを含めたのですか?それらのキャラクターをエスケープする必要があるかもしれない状況はありますか?