ASP(VBScript)中输入处理的最佳方式(或至少是最常见的方式)是什么?我主要关心的是 HTML/JavaScript 注入和 SQL 注入。是否有一些等效于 PHPhtmlspecialchars
或addslashes
等的?还是我必须使用字符串替换函数之类的手动操作?
2 回答
底线是这个:
- 在将用户输入写入页面之前,始终对用户输入进行 HTML 编码。
Server.HTMLEncode()
为你做。 - 始终使用参数化查询与数据库交互。
ÀDODB.Command
和ADODB.CommandParameter
对象在这里是正确的选择。 - 始终在呈现页面的 IIS 服务器上使用 URLScan 实用程序和 IIS 锁定,除非它们是版本 6 及更高版本,不再需要这些工具。
如果你一味地坚持第 1 点和第 2 点,我想不出有多少会出错。
大多数漏洞来自未正确编码用户输入或从中构建 SQL 字符串。如果您出于某种原因遇到了 HTML 编码的用户输入阻碍了您的工作,那么您已经在您的应用程序中发现了一个设计缺陷。
我将在 Tomalaks 列表中添加另一点。
避免在 SQL 代码中使用字段值的串联。也就是说,在某些情况下,存储过程可能会在字符串中构建一些 SQL 以随后执行。这很好,除非文本字段值用作其构造的一部分。
命令参数可以保护设计用于输入值的 SQL 代码不被劫持以执行不需要的 SQL,但它允许这些不需要的 SQL 成为数据库中的数据。这是一级脆弱性。如果该字段的值随后用于存储过程中的某些 SQL 字符串连接,则存在二级注入漏洞。
另一个考虑是这只是最低限度的保护。它所做的只是使攻击尝试变得无害。然而,在许多情况下,最好添加一个系统来防止此类数据输入和/或改变管理员以进行潜在的注入攻击。
This is where input validation becomes important. I don't know of any tools that do this for you but a few simple Regular Expressions might help. For example, "<\w+" would detect the attempt to include a HTML tag in the field.