【发布时间】:2011-11-04 11:52:19
【问题描述】:
我有一个 ASP.net 应用程序的小问题 - XSS 请求验证(即引发“潜在危险的 request.form 值...”异常的那个),似乎对我们来说不能正常工作。
我的网站上有以下简单的测试表格:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test2.aspx.vb"
Inherits="Test2" %>
<form id="form1" runat="server">
<asp:textbox ID="Textbox1" runat="server" ></asp:textbox>
<asp:Button ID="btnSubmit" runat="server" Text="Uh oh" />
</form>
在我们的 web.config 中为 httpRuntime 元素添加以下内容:
<httpRuntime maxRequestLength="8192" />
如果我在文本框中输入以下文本:
<script>alert('XSS!');</script>
表单发布时没有错误,我希望它会出错,抱怨“潜在危险......等等”。我为按钮添加了一个单击事件处理程序并调用 Request.ValidateInputs() 仍然没有问题。观察 Request 变量,我可以看到一个属性调用 ValidateInputCalled,即使在我显式调用之前也是如此......
我们的目标是框架的 v4.0,我发现如果我像这样编辑 httpRuntime 元素:
<httpRuntime maxRequestLength="8192" requestValidationMode="2.0" />
然后页面请求验证开始像我预期的那样工作(但我认为这不是必需的)。像这样的配置中唯一的另一件事是一组规则,如下所示:
<location path="Admin/News.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</location>
我们使用它来允许我们关闭对一组选定页面的验证(在页面级别关闭),其中允许用户在其文本中提交一组选定的 HTML 标记。
这在以前肯定是有效的。有谁知道为什么这现在可能不起作用?我不想为整个站点恢复到 v2.0 请求验证模式。
刚刚尝试了一个新的网站项目,单页,同上,请求验证错误正在触发。我们的原始站点的 web.config 非常大 - 有人知道此文件中可能影响请求验证的其他属性吗?配置文件中的 pages 节点如下所示:
<pages enableEventValidation="false" enableSessionState="true"
enableViewStateMac="true"
viewStateEncryptionMode="Always"
controlRenderingCompatibilityVersion="3.5"
clientIDMode="AutoID">
【问题讨论】: