我想知道如何在ASP.net web-api中最好地处理XSS攻击。我有很多api控制器。他们中的大多数都是将json发布到服务器上。
我们应该在什么级别验证字符串,以便它们不包含恶意<script>
标记?
public class SomeModel
{
[NoXssPlease]
public string SomeProp {get;set;}
}
或
[Post]
[NoXssPlease]
public void Post
{
}
或在全局过滤器或处理程序级别执行某些操作。我一直在寻找有关如何解决这个问题的一些信息,但对于如何做到这一点有不同的意见。
答案 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;
}
}