【发布时间】:2014-06-02 13:56:49
【问题描述】:
我们最近在 Internet Explorer 8 中的网站上遇到了问题。
我们有一个表单,当在 IE8 中提交时会显示验证异常,声称字符“☃”具有潜在危险。
System.Web.HttpRequestValidationException (0x80004005):从客户端检测到具有潜在危险的 Request.Form 值 (_utf8="☃")。
有趣的是,这个字符没有输入,也不是我们 VB .NET 项目的一部分。
如果我们将页面设置为 validateRequest = "false",那么错误就会消失,但是我们担心这会使自己面临 XSS 攻击。我们可以清理我们自己的输入,但我们宁愿找到问题的根源,而不是创造一个变通方法。
这个关于 Ruby 的帖子看起来很有趣,但我们不确定它如何适用于我们的情况: What is the _snowman param in Ruby on Rails 3 forms for?
同样值得考虑的是,该表单适用于我们测试过的所有其他浏览器(IE11、Chrome、Fire Fox、Opera)。
【问题讨论】:
-
“我们可以清理我们自己的输入” - 我建议你应该清理你的输入,不管 .NET 说它在做什么!
-
清理你自己的输入是你如何解决问题的根源。 .NET 验证只是一种解决方法/安全网,而不是您应该依赖的永久解决方案。也就是说,可能是某处存在编码不匹配吗?也许浏览器以与您想象的不同的字符集提交表单?
-
@Liath - 都是正确的 - 但额外的保护级别总是很方便,特别是在大型项目/团队中,即使进行了某种渗透测试,你能确定你已经正确编码了所有东西吗?请求验证器是针对 xss 攻击的第一级防御(不是防弹的,但很方便)。
标签: asp.net vb.net validation utf-8