经典ASP SQL注入

时间:2009-10-06 07:36:15

标签: asp-classic sql-injection

我最近继承了一个经典的asp网站,其中包含大量内联SQL插入语句,这些语句易受SQL注入攻击。

这些插入语句通过ADO命令对象执行。

将ADO Command Object的Prepared属性设置为true可确保在执行前参数化参数,从而降低SQL注入的风险吗?

5 个答案:

答案 0 :(得分:6)

不,如果您使用直接从“外部”获得的值构建SQL字符串,那么“预备语句”将无法帮助您。

a

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"

仍然在寻找麻烦。 解决此问题的唯一方法是在查询中使用参数。

答案 1 :(得分:6)

此链接应该证明是有用的。

Classic ASP SQL Injection Protection

答案 2 :(得分:2)

您还可以查看名为“Owasp stinger”的asp经典开源项目。这不仅有助于Sql注入,还有标头注入以及所有Web应用程序常见的许多其他安全问题。

http://www.owasp.org/index.php/Classic_ASP_Security_Project

答案 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=''

所以逃避单引号是你需要担心的真正重要的。