我知道在Perl中清理sql字符串的正确方法是use a prepared statement,但是,这个特殊的Perl脚本生成的语句稍后将在不同的环境中执行,而不是Perl。 没有要连接的数据库。
如何安全地转义字符串以插入MySQL查询。解决方案不必是可移植的。
答案 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注入所必需的,例如“;”或括号并替换它们或扔掉它们?!?