ASP.NET Request Validator允许脚本

时间:2017-09-18 10:33:04

标签: c# asp.net request-validation

我一直致力于ASP.NET项目 我的Request Validator是默认true 因此,不允许危险的脚本攻击,ASP.NET会引发错误 危险请求

<script>alert('hello')</script>

非常好。安全

但为什么我的下面的脚本没有被阻止,ASP.NET请求验证器没有阻止下面的脚本

<%tag style=xss:expression(alert('hello'))>

这未被阻止并被解雇

我的问题

1) <%tag style=xss:expression(alert('hello'))>
why this request was not blocked

2) <script>alert('hello')</script> 
This request was blocked and ASP.NET throws me to yellow error page
Is there any way to show error on the same page

请帮助

由于

1 个答案:

答案 0 :(得分:0)

1)本文可能会帮助您更好地理解validaterequest: https://infosecauditor.wordpress.com/2013/05/27/bypassing-asp-net-validaterequest-for-script-injection-attacks/

一些摘录:

  

ValidateRequest存在于ASP.NET版本1,2和3中.ASP.NET   版本4不使用ValidateRequest过滤器。

     

ValidateRequest验证用户输入并在返回时返回false   符合以下条件:

<a-z     –    A ‘<’ character followed by an alpha character.
<!, </, <?     –    A ‘<’ character followed by a special character.
&,#    –    A special character.

您可以编写自己的自定义验证器,扩展RequestValidator&amp;照顾这些事情。 Eg:

2) Is there any way to show error on the same page

是。但是你必须自己验证输入和&amp;再见asp.net的好处https://gargmanoj.wordpress.com/tag/httprequestvalidationexception/

没有。因为发生了应用程序错误&amp; asp.net已停止处理它。但您绝对可以显示自定义错误页面。

查看答案here&amp; here

protected void Application_Error(object sender, EventArgs e)
{
    var context = HttpContext.Current;
    var exception = context.Server.GetLastError();
    if (exception is HttpRequestValidationException)
    {
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Redirect("~/ErrorPage.aspx");

        return;
    }
}

AntiXss编码器类还有一个选项可用于编码输出值。

<httpRuntime encoderType="System.Web.Security.AntiXss.AntiXssEncoder" />