我最近继承了一个经典的asp网站,其中包含大量内联SQL插入语句,这些语句易受SQL注入攻击。
这些插入语句通过ADO命令对象执行。
将ADO Command Object的Prepared属性设置为true可确保在执行前参数化参数,从而降低SQL注入的风险吗?
答案 0 :(得分:6)
不,如果您使用直接从“外部”获得的值构建SQL字符串,那么“预备语句”将无法帮助您。
a
sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"
仍然在寻找麻烦。 解决此问题的唯一方法是在查询中使用参数。
答案 1 :(得分:6)
此链接应该证明是有用的。
答案 2 :(得分:2)
您还可以查看名为“Owasp stinger”的asp经典开源项目。这不仅有助于Sql注入,还有标头注入以及所有Web应用程序常见的许多其他安全问题。
答案 3 :(得分:0)
这是另一个很好的链接和示例。
http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx
过去我们刚刚创建了几个函数来处理SQL注入和XSS的任何外部输入。然后我们慢慢地将所有内联SQL转换为存储过程。
答案 4 :(得分:-2)
我建议你做的是写一个函数来清理用户输入,然后通过它运行所有的请求变量。当我写我的时候,我做了类似的事情:
大多数SQL注入会尝试类似' or 1=1 or a='
的内容
所以SQL代码是:
SELECT * from mytable where mycolumn = '' or 1=1 or a=''
所以逃避单引号是你需要担心的真正重要的。