0

我知道我必须转义单引号,但我只是想知道是否还有其他字符或文本字符串我应该提防

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

4

2 回答 2

2

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

  • \
  • '
  • "
  • 空(ASCII 0)
  • \n
  • \r
  • 控制+Z

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

结论是:不要对字符串进行转义,尤其是对于难以调试、难以阅读、难以理解的正则表达式。使用内置提供的函数或使用参数化 SQL 查询(其中所有参数不能包含任何被引擎解释为 SQL 的内容)。这在 h2 文档中也有说明:h2 db sql injection protection

上述问题的一个简单解决方案是使用准备好的语句:

于 2012-09-24T11:52:41.227 回答
2

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

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

您是正确的,单引号 (') 是用户输入的禁忌;但是双引号 (") 和反斜杠 (\) 也绝对应该被忽略(请参阅上面的链接了解 PHP 函数忽略哪些字符,因为这些是最重要和最基本的字符)。

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

于 2012-09-09T02:39:12.167 回答