繁体   English   中英

从客户端检测到危险的Request.Cookies值

[英]Dangerous Request.Cookies value was detected from the client

我处于工作状态,因为我突然开始收到此错误:

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

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

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

使用httpRuntime requestValidationMode =“ 2.0”
在您的web.config中(保留该元素上已经具有的所有属性,如果已经存在)。 ASP.NET4.0否则会忽略ValidateRequest。 取自: 这里

我正在建立一个网站,其中大多数输入都使用瑞典语,因此为了防止浏览器出现问题,我借助HttpUtility类对所有cookie值进行了编码。

这意味着像“Ö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,危险请求不会有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM