我对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">
答案 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>
为我们解决问题(但在其他地方给我们一些问题)。