我想知道我是否真的需要ASP.net请求验证(抛出“A potentially dangerous Request.Form value was detected from the client
”的那个)?
我使用Razor模板引擎,只使用以下命令从我的数据库输出:
DisplayFor
/ EditorFor
(转义HTML)@Model.SomeField
(转义HTML)HtmlString
个实例。似乎我不需要任何请求验证,并且可以在用户输入HTML时没有异常的情况下禁用它,不是吗?或者我错过了什么?
什么是关闭它的首选方法?
答案 0 :(得分:1)
可以禁用RequestValidation。这实际上是一种提高安全性的愚蠢方式,但微软试图让他们的东西变得傻逼(在我看来)。 "傻瓜型"有点苛刻 - 做正确的安全是很难的,我并不是说这是一件坏事,但如果这是你对抗XSS的唯一防线,那么你可能遇到麻烦。
话虽如此,听起来你需要在你的请求中加入特殊字符 - 所以你应该禁用它并确保正确地转义/编码你的输出。
这是禁用它的好资源:Request Validation in ASP.NET
相关位:
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
[ValidateInput(false)]
public ActionResult Edit(string comment)
[AllowHtml]
public string Prop1 { get; set; }
在我看来,你应该在全局范围内启用它,但是尽可能小的一部分禁用它。在更安全的方面犯错更好,除非它使系统过于复杂,否则增加安全层通常是件好事。
因此,总而言之,如果您故意要允许这类请求,则无需进行请求验证,但要小心数据并确保不要为XSS打开自己。< / p>
答案 1 :(得分:0)
您可以通过添加[AllowHtml]属性来禁用特定属性。
但是如果你不是故意允许HTML,那么你应该验证它,因为有些人不仅可以添加标记,还可以添加类似警报的脚本(&#39; tard&#39;)
然后,每当有人加载您的页面时,都会受到侮辱:(