如何防止ASP / VBScript中的注入?

时间:2008-11-11 05:28:25

标签: vbscript asp-classic code-injection input-filtering

ASP(VBScript)中输入处理的最佳方式(或至少是最常用的方法)是什么?我主要关心的是HTML / JavaScript注入和放大器。 SQL注入。是否有一些等同于PHP的htmlspecialcharsaddslashes等等?或者我是否需要手动执行字符串替换功能?

2 个答案:

答案 0 :(得分:5)

底线是:

  1. 在将用户输入写入页面之前,始终对用户输入进行HTML编码。 Server.HTMLEncode()为您做到这一点。
  2. 始终使用参数化查询与数据库进行交互。 ÀDODB.CommandADODB.CommandParameter对象是正确的选择。
  3. 始终在呈现页面的IIS服务器上使用URLScan实用程序和IIS锁定,除非它们是版本6及更高版本,不再需要这些工具。
  4. 如果你坚持第1点和第2点盲目,我想不出太多可能出错的地方。

    大多数漏洞来自未正确编码用户输入或从中构建SQL字符串。如果由于某些原因,HTML编码用户输入阻碍了您的使用,那么您在应用程序中发现了一个设计缺陷。

答案 1 :(得分:2)

我会向Tomalaks列出另外一点。

避免在SQL代码中使用字段值的串联。也就是说,在某些情况下,存储过程可能会在字符串中构建一些SQL以便随后执行。除非将文本字段值用作其构造的一部分,否则这很好。

命令参数可以保护用于输入值的SQL代码,使其不被劫持到执行不需要的SQL,但它允许这种不需要的SQL成为数据库中的数据。这是第一级的可用性。如果在存储过程内的某些SQL字符串连接中使用字段的值,则存在二级注入可用性。

另一个考虑因素是这只是最小的保护。它所做的一切都是使攻击企图无害。但是在许多情况下,最好添加一个系统来防止此类数据输入和/或改变管理员潜在的注入攻击。

这是输入验证变得重要的地方。我不知道有哪些工具可以帮到你,但是一些简单的正则表达式可能有所帮助。例如,“< \ w +”将检测在字段中包含HTML标记的尝试。