Asp classic 经典ASP SQL注入

Asp classic 经典ASP SQL注入,asp-classic,sql-injection,Asp Classic,Sql Injection,我最近继承了一个经典的asp网站,其中包含大量易受SQL注入攻击的内联SQL insert语句 这些insert语句通过ADO命令对象执行 将ADO命令对象的Prepared属性设置为true是否会确保查询在执行之前参数化,从而降低SQL注入的风险?否,如果您使用直接从“外部”获取的值构建SQL字符串,则“Prepared语句”将帮不上忙 a 他还在自找麻烦。 解决这个问题的唯一方法是在查询中使用参数。这个链接应该很有用 我建议您编写一个函数来清理用户输入,然后通过该函数运行所有请求变量。当我写

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

这些insert语句通过ADO命令对象执行


将ADO命令对象的Prepared属性设置为true是否会确保查询在执行之前参数化,从而降低SQL注入的风险?

否,如果您使用直接从“外部”获取的值构建SQL字符串,则“Prepared语句”将帮不上忙

a

他还在自找麻烦。
解决这个问题的唯一方法是在查询中使用参数。

这个链接应该很有用


我建议您编写一个函数来清理用户输入,然后通过该函数运行所有请求变量。当我写我的时,我做了一些事情,比如:

  • 转义单引号
  • 移除;以及其他特殊字符和
  • 确保你不能--(注释)说出语句的结尾
大多数SQL注入都会尝试类似于
”或1=1或a='
因此,SQL代码应该是:

SELECT * from mytable where mycolumn = '' or 1=1 or a=''

因此,转义单引号是您需要担心的真正大问题。

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


这里是另一个很好的链接和示例


在过去,我们只创建了两个函数来处理SQL注入和XSS的任何外部输入。然后,我们慢慢地将所有内联SQL转换为存储过程。

很多人都落入了这个陷阱。创建函数会降低代码的可读性,这不是未来的证明。我没有办法追踪我多年前建立的所有经典ASP网站,更不用说更新他们可能使用或不使用的功能了。ADO参数或参数化存储过程是最好的选择。我同意参数是最佳实践,但如果您试图快速清理一堆代码,那么将所有用户输入包装到函数中就更容易了。我认为添加一堆
oCmd.Parameters.Append oCmd.CreateParameter(…)不会花那么长时间
对您的代码进行声明,老实说,在这种情况下,我认为您最好关注质量而不是速度,特别是如果您没有时间做两次工作。可能重复
SELECT * from mytable where mycolumn = '' or 1=1 or a=''