我使用MySQL API的功能必須轉義哪些字符以防止(My)SQL注入?
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 : "\\_",
}
現在,我想知道是否所有這些字符真正需要的是ES披着披肩。我明白爲什麼%和_在那裏,它們是LIKE運算符中的元字符,但我不能簡單地理解爲什麼它們會添加退格和製表符(\ b \ t)?如果您執行查詢,是否存在安全問題:
SELECT a FROM b WHERE c = '...user input ...';
其中用戶輸入包含製表符或退格字符?
我的問題是:爲什麼他們在ESAPI安全庫中包含\ b \ t?有沒有任何情況下你可能需要逃避這些角色?
我不是一個Python人或MySQL的人,但我的第一次,雖然是尋找單元測試對於這一點,遺憾的是他們並沒有透露任何useful- http://code.google.com/p/owasp-esapi-python/source/browse/esapi/test/codecs/test_mysql.py – RichardOD 2009-07-06 13:35:03