2011-11-04 107 views
1

我有一个ASP.net应用程序的轻微问题 - XSS请求验证(即抛出'潜在危险的request.form值...'例外),不似乎对我们来说工作正常。ASP.net XSS请求验证没有触发

我对我们的网站下面简单的测试形式:

<%@ 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> 

而在我们的httpRuntime元素web.config中的以下内容:

<httpRuntime maxRequestLength="8192" /> 

如果我输入下面的文成文本框:

<script>alert('XSS!');</script> 

表单帖子没有错误,我期望它出错,c诠释“潜在危险......等”。我为按钮添加了一个单击事件处理程序,并调用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 enableEventValidation="false" enableSessionState="true" 
    enableViewStateMac="true" 
    viewStateEncryptionMode="Always" 
    controlRenderingCompatibilityVersion="3.5" 
    clientIDMode="AutoID"> 

回答

0

好的。我们使用单个页面将我们的配置文件带到全新的站点,并系统地开始删除部分,直到发现问题。

我们使用第三方库的一些我们的网站控件,我们发现,除本节:我们

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

解决了这个问题(但给了我们其他地方的一些问题)。

+0

这是否意味着所讨论的库实际上是否禁用页面的请求验证?这是该控件的记录功能吗? – Erlend

+0

无论如何,请不要只依靠请求验证来停止XSS。有XSS矢量可以绕过它。 – Erlend

+0

@Erlend - 此页面未使用相关控件。不,它更像是一个无证的'功能':)我们已经实施了额外的验证以及试图追踪这个问题。 – Paddy

1

我也有同样的问题,但在我的情况下,它是在global.asax的Application_BeginRequest中的try-catch,它在访问HttpContext.Current.Request.Form时遇到了错误,然后使它变肿。如果有一个cookie修复uploadify

1

我偶然发现这个问题,同时追查类似的问题。事实证明,页面有问题将其数据作为JSON发布,并且默认的JSON模型联编程序不执行ASP.NET请求验证。我最终找到了伊姆兰俾路支的一篇博客文章,描述了这种已知的行为和解决方法:http://forums.asp.net/t/1682096.aspx?MVC3+JSON+Security

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

1

我发现了同样的问题,如果你安装Glimpse

web.config中的以下行完全的发生停止请求验证 - 不管你的一瞥设置:

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