防止恶意sql注入

时间:2011-06-16 20:07:45

标签: mysql sql perl security

我有一堆perl CGI,它们使用params并在各种DBI mySql查询中使用它们的值。

如果我不允许任何用户提交的包含“select”,“insert”,“delete”或“update”字样的用户提交的值用作参数,那么恶意用户是否有任何方式可以对我的系统造成伤害(或窃取数据)只要我用单引号包装所有varchar用户提供的值?

我意识到这个问题与其他问题非常相似,但其他人似乎都指向各种PHP解决方案,而且我没有使用PHP,所以,请原谅冗余,或者指出一个相关问题的答案这个具体的问题。

2 个答案:

答案 0 :(得分:12)

在Perl中处理此问题的正确方法是在所有SQL查询中使用placeholders。通过DBI占位符传递用户提供的数据将确保所有内容都被正确引用。 (当然,这并不能保证它是安全,但它会阻止SQL注入。)

答案 1 :(得分:4)

使用参数化查询。然后用户输入根本不是命令的一部分,这是唯一可靠的方法,知道命令不会被修改。