正则表达式,以防止SQL注入

时间:2012-09-09 02:20:29

标签: sql-injection

我知道我必须逃避单引号,但我只是想知道是否还有其他字符或文字字符串我应该防范

我正在使用mysql和h2数据库......

2 个答案:

答案 0 :(得分:2)

这在某种程度上取决于您需要从用户那里获得什么类型的信息。如果你只是在寻找简单的文本,那么你也可以忽略用户可能输入的所有特殊字符(如果它不是太麻烦) - 为什么允许用户输入你的查询中没有意义的字符?

某些语言具有为您解决此问题的功能。例如,PHP具有mysql_real_escape_string()函数(http://php.net/manual/en/function.mysql-real-escape-string.php)。

你是正确的,单引号(')是用户输入no-no's;但是双引号(“)和反斜杠(\)也应该被忽略(参见上面的链接,PHP函数忽略哪些字符,因为这些是最重要和最基本的字符)。

希望这至少是一个好的开始!

MtM参数

答案 1 :(得分:2)

如果检查所有高级语言使用的MySQL函数mysql-real-escape-string,您会看到奇怪的字符列表非常庞大:

  • \
  • NUL(ASCII 0)
  • \ n
  • \ r
  • 控制+ Z

像PHP一样的高级语言包装器也可以保护字符串免受格式错误的unicode字符的影响,这可能最终成为引用。

结论是:不要逃避字符串,特别是难以调试,难以理解,难以理解的正则表达式。使用内置提供的函数或使用参数化SQL查询(其中所有参数都不能包含引擎作为SQL的任何内容)。这也在h2文档中说明:h2 db sql injection protection

  

上述问题的一个简单解决方案是使用预先准备好的声明: