如何保护MVC 5 ASP.Net应用程序免受HTTP参数污染

时间:2017-09-28 09:06:07

标签: c# asp.net-mvc security web

在网络安全审核的范围内,我们从我们的提供商处获得了安全扫描评估结果,其中提到HPP(Http Parameter Polution)是应用程序中的漏洞。 在我们的例子中,我们正在构建一个MVC5应用程序,我想就如何解决这个问题提出一些建议。我知道,这是关于验证和检查URL,但如果我得到一个解决方案示例,那将是很好的。我想将它集中在应用程序中。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

查看此链接: http://blog.mindedsecurity.com/2009/05/client-side-http-parameter-pollution.html

这是OWASP对此主题的官方定义:

反射HTML参数污染(HPP)是一种注入弱点漏洞,当攻击者可以注入分隔符并更改应用程序生成的URL的参数时,就会发生此漏洞。攻击的后果取决于应用程序的功能,但可能包括访问和潜在利用不可控制的变量,执行其他攻击(如跨站请求伪造)或以非预期的方式更改应用程序行为。建议包括使用严格的验证输入,以确保服务器正确处理编码的参数分隔符“%26”,并在用户提供的内容包含在应用程序生成的链接或其他形式的输出中时使用URL编码。

我创建了一个ControllerBase类,其中所有控制器都继承它,在这个类中我实现了OnActionExecuting方法,在这个方法中我验证了url aginst%26和%3

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    try
    {
        if (Request.Url != null)
        {
            var queryUrl = Request.Url.Query;
            if (queryUrl.Contains("%26") || queryUrl.Contains("%3"))
            {
                var routeValueDictionary = new RouteValueDictionary
                {
                    {"controller", "Error"},
                    {"action", "Index"}
                };
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(routeValueDictionary));
            }
        }
    }
    catch (HttpRequestValidationException exception)
    {
        var routeValueDictionary = new RouteValueDictionary { { "controller", "Error" }, { "action", "Index" } };
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(routeValueDictionary));
    }
}

通过此修复,我总是得到一个干净的扫描回来。 试试吧。希望它有所帮助