当用户的输入将被插入到 MySQL 查询中时,应该在用户输入中替换哪些危险字符?我知道引号、双引号、\r 和 \n。还有其他人吗?
(我没有使用接受参数的智能连接器的选项,因此我必须自己构建查询,这将在多种编程语言中实现,包括一些晦涩难懂的语言,因此mysql_real_escape_string
PHP 等解决方案无效)
Tom
问问题
6397 次
2 回答
7
mysql.com 文档中的mysql_real_escape_string():
考虑到连接的当前字符集,将 from 中的字符串编码为转义的 SQL 字符串。结果被放入 to 并附加一个终止的空字节。编码的字符为 NUL (ASCII 0)、“\n”、“\r”、“\”、“'”、“"”和 Control-Z(参见第 8.1 节“文字值”)。(严格来说, MySQL 只要求对查询中用于引用字符串的反斜杠和引号字符进行转义。此函数引用其他字符以使它们更易于在日志文件中阅读。)
mysql_real_escape_string()是字符集感知的,因此复制它的所有功能(尤其是针对多字节攻击问题)并不是一件小事。
来自http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html:
AS = 添加斜杠() MRES = mysql_real_escape_string() ACS = addcslashes() //用 "\\\000\n\r'\"\032%_" 调用 特征作为 MRES ACS 转义引号、双引号和反斜杠 是 是 是 转义 LIKE 修饰符:下划线、百分号 no no yes 用单引号而不是反斜杠转义 no yes*1 no 字符集感知 否 是*2 否 防止多字节攻击 否 是*3 否
于 2008-10-23T15:34:36.953 回答
4
您需要支持哪些语言?使用语言的内置清理比编写自己的要好得多。
编辑:在mysql_real_escape_string
php.net 上查看:
mysql_real_escape_string()
调用 MySQL 的库函数,该函数在以下字符前面加上mysql_real_escape_string
反斜杠:\x00
、\n
、\r
、\
、'
和."
\x1a
于 2008-10-23T14:25:33.470 回答