gpt4 book ai didi

asp.net-mvc-4 - ValidateInput(false) 与AllowHtml

转载 作者:行者123 更新时间:2023-12-03 06:12:03 25 4
gpt4 key购买 nike

我有一个用于创建备忘录的表单,为此我使用富文本编辑器来提供一些样式,这会创建 html 标签以应用样式。当我发布该文本时,mvc 会抛出错误以防止潜在危险的脚本,因此我必须明确允许它。

我发现有两种方法可以做到这一点,一种是用 [ValidateInput(false)] 装饰 Controller 方法,另一种是用 ViewModel 属性装饰[AllowHtml]。对我来说,[AllowHtml] 看起来更好,但我只发现该方法使用了 1 次,并且 [ValidateInput(false)] 似乎是首选方式。

我应该使用哪种方法?两者有何区别?

最佳答案

ValidateInput 和AllowHTML 直接与XSS 连接安全问题

所以让我们首先尝试了解 XSS。

XSS(跨站点脚本)是一种安全攻击,攻击者在输入数据时注入(inject)恶意代码。现在好消息是,MVC 中默认情况下会阻止 XSS。因此,如果任何人尝试发布 JavaScript 或 HTML 代码,他都会遇到以下错误。

Enter image description here

但在实时情况下,有些场景必须允许使用 HTML,例如 HTML 编辑器。因此,对于这些类型的场景,您可以使用以下属性来装饰您的操作。

[ValidateInput(false)]
public ActionResult PostProduct(Product obj)
{
return View(obj);
}

但是等等,这里有一个问题。问题是我们允许 HTML 执行完整的操作,这可能很危险。因此,如果我们能够对现场或属性(property)级别进行更精细的控制,这将真正创建一个简洁、整洁和专业的解决方案。

这就是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 通过示例逐步演示了这两个属性的重要性。

关于asp.net-mvc-4 - ValidateInput(false) 与AllowHtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25630141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com