Perl:escape-sql字符串,而不需要数据库连接



我知道在Perl中清理sql字符串的正确方法是使用一个准备好的语句,然而,这个特定的Perl脚本生成的语句稍后将在不同的环境中执行,而不是Perl。它没有可连接的数据库

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

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

我可以想出一些技巧性的解决方案,但没有一个是真正令人满意的,所以让我们从文档中着手:

编码的字符有"\"、"'"、"、NUL(ASCII 0)、"\n"、"\r"和Control+Z。严格来说,MySQL只要求转义反斜杠和用于引用查询中字符串的引号。

这表明,你可能可以通过引用函数来完成

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

s/([\"'nrcZ])/\$1/g;

尽管我仍然会保持警惕。

您只需在添加到查询字符串中的变量中检查执行SQL注入所需的特殊字符,如";"或括号,然后替换或丢弃它们?!?

相关内容

  • 没有找到相关文章

最新更新