防止恶意sql注入

Gen*_* S. 3 mysql sql security perl

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

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

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

fri*_*edo 12

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

  • Nitpicky,我知道,但是占位符_*不会*_引用传递的值.SQL命令的结构和绑定到占位符的数据将分别发送到数据库,从而无需引用.占位符引用数据的唯一时间是DBI必须伪造它们,因为它正在处理一些不支持真实事物的廉价数据库后端. (5认同)