我正在使用 MySQL API 的功能
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 ?在任何情况下您可能需要转义这些字符?