ASP.net XSS请求验证未触发

时间:2011-11-04 11:52:20

标签: asp.net xss

我对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>

表格帖子没有错误,我希望它会出错,抱怨“有潜在危险...等等”。我为按钮添加了一个click事件处理程序,并调用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">

4 个答案:

答案 0 :(得分:1)

我也有同样的问题,但在我的情况下,它是global.asax的Application_BeginRequest中的try-catch,它在访问HttpContext.Current.Request.Form时捕获了错误,然后只是将其吞没。与uploadify的cookie修复有关

答案 1 :(得分:1)

我在追踪类似问题时偶然发现了这个问题。事实证明,有问题的页面将其数据作为JSON发布,而默认的JSON模型绑定器不执行ASP.NET请求验证。我最终找到了Imran Baloch撰写的一篇博客文章,描述了这种已知行为并为此解决了这个问题:http://forums.asp.net/t/1682096.aspx?MVC3+JSON+Security

我知道这不是OP的问题,但也许其他人会发现它很有用。

答案 2 :(得分:1)

如果您安装了Glimpse

,我发现了同样的问题

web.config中的以下行完全停止了请求验证的发生 - 无论您的Glimpse设置是什么:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" />
    </modules>
</system.webServer>

答案 3 :(得分:0)

行。我们将配置文件带到一个包含单个页面的全新站点,并系统地开始删除部分,直到找到问题为止。

我们使用第三方库来访问我们网站中的某些控件,我们发现删除了此部分:

<httpModules>
    <add name="CallbackManager" 
      type="Dart.PowerWEB.LiveControls.CallbackManager,Dart.PowerWEB.LiveControls"/>
</httpModules>

为我们解决问题(但在其他地方给我们一些问题)。