当前位置:  开发笔记 > 编程语言 > 正文

清理MySQL用户参数

如何解决《清理MySQL用户参数》经验,为你挑选了1个好方法。

当用户的输入插入MySQL查询时,用户输入中应该替换哪些危险字符?我知道引号,双引号,\ r和\n.还有其他人吗?
(我没有选择使用接受参数的智能连接器,因此我必须自己构建查询,这将以多种编程语言实现,包括一些模糊的语言,因此mysql_real_escape_stringPHP中的解决方案无效)



1> micahwittman..:

来自mysql.com docs的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 = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

Feature                                         AS     MRES    ACS
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有