【问题标题】:ASP.NET Snowman in Validation Error验证错误中的 ASP.NET 雪人
【发布时间】: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


【解决方案1】:

您可以在请求验证器中覆盖此特定情况(请原谅我的 C#,希望您能够翻译它):

public class EnhancedRequestValidator : RequestValidator {
  protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {
    if (!string.IsNullOrEmpty(value)) {
      value = value.Replace("_utf8=\"☃\"", string.Empty);
    }
    return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
  }
}

在你的 web.config 中

<system.web>
  <httpRuntime 
    requestValidationType="Contosco.Web.EnhancedRequestValidator, Contosco.Web" />
</system.web>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多