天天看點

從用戶端中檢測到有危險的 Request.QueryString 值 的解決方法

如果在頁面中,将文本編輯器内的文本内容直接送出給背景後提示“存在危險的 Request.QueryString 值“,如下圖所示

從用戶端中檢測到有危險的 Request.QueryString 值 的解決方法

錯誤發生的原因

那是因為文本編輯器自動設定了文本的格式,即添加了各種HTML标簽,是以我們在使用裡面的内容時,需要在前台用JS方法将HTML标簽進行編碼,将編碼後的文本内容傳遞給背景,在背景用C#的方法将它解碼成HTML标簽後存到資料庫中。

從用戶端中檢測到有危險的 Request.QueryString 值 的解決方法
從用戶端中檢測到有危險的 Request.QueryString 值 的解決方法

編碼後的内容

從用戶端中檢測到有危險的 Request.QueryString 值 的解決方法

通過JS對HTML标簽編碼和解碼

var HtmlUtil = {
            /*1.用浏覽器内部轉換器實作html轉碼*/
            htmlEncode:function (html){
                //1.首先動态建立一個容器标簽元素,如DIV
                var temp = document.createElement ("div");
                //2.然後将要轉換的字元串設定為這個元素的innerText(ie支援)或者textContent(火狐,google支援)
                (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
                //3.最後傳回這個元素的innerHTML,即得到經過HTML編碼轉換的字元串了
                var output = temp.innerHTML;
                temp = null;
                return output;
            },
            /*2.用浏覽器内部轉換器實作html解碼*/
            htmlDecode:function (text){
                //1.首先動态建立一個容器标簽元素,如DIV
                var temp = document.createElement("div");
                //2.然後将要轉換的字元串設定為這個元素的innerHTML(ie,火狐,google都支援)
                temp.innerHTML = text;
                //3.最後傳回這個元素的innerText(ie支援)或者textContent(火狐,google支援),即得到經過HTML解碼的字元串了。
                var output = temp.innerText || temp.textContent;
                temp = null;
                return output;
            }
        };
           

首先定義兩個方法,然後可通過

HtmlUtil.htmlEncode()和

HtmlUtil.htmlDecode()`方法對編輯器内的内容進行編碼和解碼

.NET編碼解碼

System.Web.HttpUtility.HtmlEncode() //對HTML标簽編碼
System.Web.HttpUtility.HtmlDecode()   //對HTML标簽解碼
           

如果采用.Net MVC,可在相應的Action上添加

[ValidateInput(false)]

特性

但是如果你使用的是MVC 3.0甚至更低版本,那麼你會發現做了以上的設定後還是無效。這是因為你還需要在web.config中做以下設定:

<system.web > 
<httpRuntime requestValidationMode="2.0" / > 
</system.web >