我一直致力于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
请帮助
由于
答案 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已停止处理它。但您绝对可以显示自定义错误页面。
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" />