簡體   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