危险的请求.日志含义从客户端检测到cookie值



我在工作中遇到了这样的情况,因为我突然开始得到这个错误:

类型为"System.Web"的异常。HttpRequestValidationException'在System.Web.dll中发生,但未在用户代码中处理

附加信息:一个潜在危险的请求。从客户端(CustomerRegionName="Ö")检测到cookie值

我知道关于这个问题已经有好几条线索了,我已经尝试了我看到的所有答案,最常见的是:

使用httpRuntime requestValidationMode="2.0"
在你的网里。配置(如果该元素已经存在,则保留该元素已有的任何属性)。否则,ASP.NET4.0会忽略ValidateRequest。
摘自:Here

我正在建立一个网站,其中大多数输入是在瑞典语,所以为了防止浏览器问题,我编码所有的cookie值与HttpUtility类的帮助。

这意味着像"Örebro"这样的值将被编码为这样的内容:%c3%96rebro.

由于某些原因。net框架认为这是某种危险值

我完全不知道该做什么…

要避免此错误,请将字符串转换为字符串的十六进制表示形式。这可以用这样的代码来完成:

string ConvertedString = BitConverter.ToString(Encoding.Default.GetBytes(YourString));

请注意,该字符串将使用"-"将十六进制分成对(即4f-cc-12-ab)。

当你读取它回来,恢复它的原始字符串的代码像这样,假设你读取编码字符串回字符串zBackInHex:

string zHex = (zBackInHex.Replace("-", "");
byte[] ba = new byte[zHex.Length / 2];  //One byte for each two chars in zHex
for(int ZZ = 0; ZZ < ba.Length; ZZ++){
   ba[ZZ] = Convert.ToByte(zHex.Substring(ZZ * 2, 2), 16);
}
string zBackIn = Encoding.ASCII.GetString(ba);  //The original string

我从另一篇文章中得到了这个方法的想法。我想说,但我不记得我最初在哪里看到的。

为什么不尝试用id替换字符串,这将消除编码的所有麻烦。创建具有区域ID, RegionName的查找表。将ID传递给cookie,就不会出现危险请求的问题。

最新更新