Я использую функцию MySQL API
mysql_real_escape_string()
Согласно документации, он экранирует следующие символы:
\0
\n
\r
\
'
"
\Z
Теперь я заглянул в библиотеку безопасности ESAPI OWASP.org, и в порте 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 ...';
Где пользовательский ввод содержит табуляторы или символы возврата?
У меня вопрос: почему они включили \ b \ t в библиотеку безопасности ESAPI? Есть ли какие-нибудь ситуации, когда вам может потребоваться экранировать эти символы?
