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

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

问题描述:

ASP(VBScript)中用于输入处理的最佳方式(或至少最常见的方式)是什么?我主要关注的是注入HTML/JavaScript注入&。是否有一些相当于PHP的htmlspecialcharsaddslashes,等等?或者我必须手动使用类似字符串替换功能的东西吗?如何防止ASP/VBScript中的注入?

底线是这样的:

  1. 总是HTML编码用户输入你写你的页面之前。 Server.HTMLEncode()是为你做的。
  2. 始终使用参数化查询来与数据库接口。 ÀDODB.CommandADODB.CommandParameter对象在这里是正确的选择。
  3. 始终在呈现页面的IIS服务器上使用URLScan实用程序和IIS锁定,除非它们是版本6或更高,不再需要这些工具。

如果你坚持要点1和2 slavishly,我想不出多少可以出错。

大多数漏洞来自未正确编码用户输入或从其构建SQL字符串。如果出于某种原因,HTML编码用户输入以您的方式发挥作用,那么您的应用程序中发现了一个设计缺陷。

+0

如果您的表单接受了将通过网络以外的其他媒介发布的内容 - 例如杂志,该怎么办?那么你不会想要HTML编码的字符。有时候,如果你不知道它会在什么时候结束,那么输入必须尽可能保持干净和原始。 – 2008-12-08 16:13:08

我会添加到Tomalaks列表另一点。

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

命令参数可以保护旨在将值从劫持输入执行不需要的SQL的SQL代码,但它允许这种不需要的SQL成为数据库中的数据。这是第一级的可调性。如果该字段的值在存储过程中的某个SQL字符串连接中使用,则存在二级注入缓冲区。

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

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