验证错误中的ASP.NET雪人

时间:2014-06-02 13:56:50

标签: asp.net vb.net validation utf-8

我们最近在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)。

1 个答案:

答案 0 :(得分: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>