ValidateInput和AllowHTML直接与XSS安全问题连接。
因此,让我们先尝试了解XSS。
XSS(跨站点脚本)是一种安全攻击,攻击者在进行数据输入时会注入恶意代码。现在好消息是默认情况下在MVC中阻止了XSS。因此,如果任何人试图发布JavaScript或HTML代码,他会出现以下错误。
但在实际当中还有场景中的HTML已经被允许,如HTML编辑器。所以对于那些场景,你可以用下面的属性来修饰你的动作。
[ValidateInput(false)]
public ActionResult PostProduct(Product obj)
{
return View(obj);
}
但是等等,这里有一个问题。问题是我们已经允许使用HTML来完成可能很危险的操作。因此,如果我们能够在现场或财产层面进行更细致的控制,那将确实创造出一个整洁,整洁和专业的解决方案。
这就是AllowHTML很有用的地方。您可以在下面的代码中看到我在产品类属性级别上装饰了“AllowHTML”。
public class Product
{
public string ProductName { get; set; }
[AllowHtml]
public string ProductDescription { get; set; }
}
因此,总结“ValidateInput”允许脚本和HTML在操作级别上发布,而“AllowHTML”在更精细的级别上。
我会建议使用“AllowHTML”,直到您确信整个操作需要裸露。
我会推荐你阅读博客文章Preventing XSS Attacks in ASP.NET MVC using ValidateInput and AllowHTML它通过一个例子逐步演示这两个属性的重要性。
很高兴在这里见到你先生。很多你的帖子对我来说在代码项目上很有用。 – 2016-02-20 14:52:54
在您的示例中,如果用户要将“html”输入到“ProductName”字段中,则仍会显示错误(如预期的那样)。有没有办法提供更加用户友好的错误信息。这个错误似乎忽略了自定义错误配置。 – philreed 2016-04-14 09:26:55