客户端检测到潜在危险的Request.Form值
每当用户在Web应用程序的页面中发布包含<
或>
时,我都会抛出此异常。
我不想谈论抛出异常或崩溃整个Web应用程序的聪明之处,因为有人在文本框中输入了一个字符,但是我正在寻找一种优雅的方式来处理这个问题。
捕获异常并显示
发生错误请返回并重新输入整个表单,但这次请不要使用<
对我来说似乎不够专业。
禁用后验证( validateRequest="false"
)肯定会避免此错误,但会使页面容易受到多次攻击。
理想情况下:当发布包含HTML限制字符的回发时,表单集合中的发布值将自动进行HTML编码。 所以我的文本框的.Text
属性将是something & lt; html & gt;
something & lt; html & gt;
有没有一种方法可以从处理程序执行此操作?
我认为你是通过试图编码所有发布的数据来从错误的角度来攻击它。
请注意,“ <
”也可能来自其他外部来源,如数据库字段,配置,文件,提要等。
此外,“ <
”不是固有的危险。 在特定的上下文中这仅仅是危险的:当编写未被编码为HTML输出的字符串时(由于XSS)。
在其他上下文中,不同的子字符串是危险的,例如,如果您将用户提供的URL写入链接,则子字符串“ javascript:
”可能很危险。 另一方面,在SQL查询中插入字符串时,单引号字符是危险的,但如果它是从表单提交的名称或从数据库字段读取的名称的一部分,则该字符非常安全。
底线是:你无法过滤危险字符的随机输入,因为任何字符在正确的情况下可能是危险的。 您应该在某些特定字符可能变得危险的地方进行编码,因为它们会跨越到具有特殊含义的不同子语言。 在向HTML写入字符串时,应使用Server.HtmlEncode对HTML中具有特殊含义的字符进行编码。 如果你将一个字符串传递给一个动态SQL语句,你应该编码不同的字符(或者更好,让框架通过使用准备好的语句等来为你做)。
如果您确信HTML编码是将字符串传递给HTML的,则在.aspx
文件的<%@ Page ... %>
指令中设置validateRequest="false"
。
在.NET 4中,您可能需要做更多。 有时还需要在web.config(reference)中添加<httpRuntime requestValidationMode="2.0" />
。
如果您使用ASP.NET MVC,则会出现此错误的不同解决方案:
C#示例:
[HttpPost, ValidateInput(false)]
public ActionResult Edit(FormCollection collection)
{
// ...
}
Visual Basic示例:
<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _
Function Edit(ByVal collection As FormCollection) As ActionResult
...
End Function
在ASP.NET MVC中(从版本3开始),可以将AllowHtml
属性添加到模型的属性中。
它允许请求在模型绑定期间通过跳过属性的请求验证来包含HTML标记。
[AllowHtml]
public string Description { get; set; }
链接地址: http://www.djcxy.com/p/48117.html
上一篇: A potentially dangerous Request.Form value was detected from the client
下一篇: ASP.NET MVC: Unit testing controllers that use UrlHelper