Perl:没有数据库连接的转义sql字符串

时间:2012-02-14 15:57:09

标签: sql perl mysql5

我知道在Perl中清理sql字符串的正确方法是use a prepared statement,但是,这个特殊的Perl脚本生成的语句稍后将在不同的环境中执行,而不是Perl。 没有要连接的数据库

如何安全地转义字符串以插入MySQL查询。解决方案不必是可移植的。

2 个答案:

答案 0 :(得分:2)

不幸的是DBD :: mysql使用的引用函数,以及一般的MySQL客户端库,需要一个活动的数据库句柄。根据文档,“这是必需的,因为转义取决于服务器使用的字符集”。

我可以想到一些hacky解决方案,但没有一个真的令人满意,所以让我们从文档中解决这个问题:

  

编码的字符是“\”,“'”,“”“,NUL(ASCII 0),”\ n“,”\ r“和Control + Z.严格来说,MySQL只需要反斜杠和引号用于引用查询中字符串的字符将被转义。

这表明您可以使用引用功能

来逃避
s/([\\"'])/\\$1/g;

s/([\\"'\0\n\r\cZ])/\\$1/g;

虽然我仍然会保持警惕。

答案 1 :(得分:-4)

您可以检查添加到查询字符串中的变量中的特殊字符,这些变量是执行SQL注入所必需的,例如“;”或括号并替换它们或扔掉它们?!?