危险的请求.日志含义从客户端检测到cookie值
本文关键字:检测 客户端 cookie 请求 日志 危险 | 更新日期: 2023-09-27 18:05:57
我在工作中遇到了这样的情况,因为我突然开始得到这个错误:
类型为"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,就不会出现危险请求的问题。