从客户端检测到Dangerous Request.Cookies值

时间:2016-09-06 13:51:04

标签: c# asp.net .net asp.net-mvc cookies

我在这里工作的情况非常突然,我突然开始收到这个错误:

System.Web.dll中出现“System.Web.HttpRequestValidationException”类型的异常,但未在用户代码中处理

其他信息:从客户端检测到潜在危险的Request.Cookies值(CustomerRegionName =“&#214”)。

我知道已经有几个关于这个问题的主题,我已经尝试了所有的答案,最常见的是以下内容:

使用 httpRuntime requestValidationMode =“2.0”
在你的web.config中(保留你已经在该元素上的任何属性,如果它已经存在)。 ASP.NET4.0否则忽略ValidateRequest。
取自:Here

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

这意味着像“Örebro”这样的值将被编码为如下所示:%c3%96rebro。

由于某种原因,.net框架认为这是一种危险的价值。

我完全不知道该怎么做......非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

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

我从另一篇文章中得到了这个方法的想法。我给予了信任,但我不记得我最初看到它的地方。

答案 1 :(得分:0)

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