身体.NET MVC上的XSS验证

时间:2015-11-03 06:53:36

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

我正在尝试解决我的申请中的问题, 每当我收到mvc应用程序的请求时,我都在使用过滤器(在global.asax上注册):

public class XSSAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Request.InputStream.Position = 0;
        string body = null;
        using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
        {
            body = sr.ReadToEnd();
        }
        bool isBodyValid = ***********
        if (!isBodyValid)
        {
            filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
    }
}

我想知道如何验证XSS漏洞的正文。 感谢。

4 个答案:

答案 0 :(得分:0)

ASP.NET MVC框架已经抵御XSS攻击:https://msdn.microsoft.com/en-us/library/hh882339(v=vs.110).aspx

如果用户尝试发送html内容,框架将在启动控制器方法(甚至是global.asax的Application_BeginRequest方法)之前抛出异常。

答案 1 :(得分:0)

您可以使用Microsoft AntiXss

答案 2 :(得分:0)

  

我想知道如何验证XSS漏洞的正文。

在安全方面,首先,利用可用的工具,而不是在可能的情况下编写自己的工具。

正如一些人所指出的,ASP.Net MVC在验证针对XSS的请求时已经具备了一些编入功能。为了防止XSS深入了解ASP.Net框架(以及客户端和其他特定应用领域),您可以查看this(参见服务器部分)。

然而,快速和肮脏的是:

ASP.Net提供了开箱即用的Request Validation,可以执行所需的验证。您还可以利用更精细的控件(属性)ValidateInput来打开或关闭特定的操作方法。

最后,您使用的是什么版本的ASP.Net?在ASP.Net v4之前,他们开始在System.Web.Security.AntiXss中合并(部分)AntiXSS库功能,但仍在使用一些黑名单方法,并鼓励使用AntiXSS库。

然而,根据最新的ASP.Net v5,他们应该使用全白名单方法。但我相信AntiXSS库仍然会提供一些额外的功能(不一定用于验证请求)。

必须提到AntiXSS库已达到使用寿命。

答案 3 :(得分:0)

验证请求不是防止XSS的最佳方法。 Even microsoft get this wrongSee here了解更多示例。

最好的方法是在输出上正确编码。例如,在HTML中将<更改为&lt;。输出到Javascript上下文时需要不同的编码。查看OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet了解详情。