我知道在Perl中清理sql字符串的正确方法是使用一个准备好的语句,然而,这个特定的Perl脚本生成的语句稍后将在不同的环境中执行,而不是Perl。它没有可连接的数据库。
如何安全地转义字符串以插入MySQL查询。解决方案不一定是可移植的。
不幸的是,DBD::mysql和mysql客户端库通常使用的引用函数需要一个活动的数据库句柄。根据文档,"这是必要的,因为转义取决于服务器使用的字符集"。
我可以想出一些技巧性的解决方案,但没有一个是真正令人满意的,所以让我们从文档中着手:
编码的字符有"\"、"'"、"、NUL(ASCII 0)、"\n"、"\r"和Control+Z。严格来说,MySQL只要求转义反斜杠和用于引用查询中字符串的引号。
这表明,你可能可以通过引用函数来完成
s/([\"'])/\$1/g;
或
s/([\"' nrcZ])/\$1/g;
尽管我仍然会保持警惕。
您只需在添加到查询字符串中的变量中检查执行SQL注入所需的特殊字符,如";"或括号,然后替换或丢弃它们?!?