ASP Web Api - 如何处理潜在的XSS攻击

时间:2014-04-02 10:58:58

标签: asp.net asp.net-web-api xss

我想知道如何在ASP.net web-api中最好地处理XSS攻击。我有很多api控制器。他们中的大多数都是将json发布到服务器上。

我们应该在什么级别验证字符串,以便它们不包含恶意<script>标记?

public class SomeModel
{
    [NoXssPlease]
    public string SomeProp {get;set;}
}

[Post]
[NoXssPlease] 
public void Post
{

}

或在全局过滤器或处理程序级别执行某些操作。我一直在寻找有关如何解决这个问题的一些信息,但对于如何做到这一点有不同的意见。

2 个答案:

答案 0 :(得分:0)

ASP.Net Web API AntiXss(https://www.nuget.org/packages/ASPNetWebAPIAntiXss/)就是您想要的。

安装包后添加&#34; [Embarr.WebAPI.AntiXss.AntiXss()]&#34;属性的属性。

答案 1 :(得分:0)

ASP.Net Web API AntiXss使用下面的代码来编码并与IsValid方法中的主值进行比较:

    string encodedValue = AntiXssEncoder.HtmlEncode(value.ToString(), false);

这就是因为例如&#39;&amp;&#39;在主值中存在验证失败。 asp.net只会阻止&#39;&lt;&#39;字符后跟字母字符,它将通过&#39;&lt; 1&#39;或&#39;&lt; &#39;值。 以下简单代码是AntiXss的实现:

public class AntiXss : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            string strValue = value.ToString();
            //Regular Expression: ^(?:[^<]|<+[^A-Za-z\/<]|<+$)*$
            int idx = -1;
            while ((idx = strValue.IndexOf('<', idx + 1)) >= 0 && idx + 1 < strValue.Length)
            {
                if (char.IsLetter(strValue[idx + 1]) || strValue[idx + 1] == '/')
                    return new ValidationResult("A potentially dangerous value was detected from the client.");
            }
        }

        return ValidationResult.Success;
    }
}