我有一个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">
这是否意味着所讨论的库实际上是否禁用页面的请求验证?这是该控件的记录功能吗? – Erlend
无论如何,请不要只依靠请求验证来停止XSS。有XSS矢量可以绕过它。 – Erlend
@Erlend - 此页面未使用相关控件。不,它更像是一个无证的'功能':)我们已经实施了额外的验证以及试图追踪这个问题。 – Paddy