1. 程式人生 > >“檢測到有潛在危險的 Request.Form 值”非關閉驗證的解決辦法

“檢測到有潛在危險的 Request.Form 值”非關閉驗證的解決辦法

最常發生此錯誤的場景:服務端接收富文字編輯器帶格式的內容。

(不推薦)網路上通常對於《.net會報出“檢測到有潛在危險的 Request.Form 值。”》異常的解決辦法是

“ValidateRequest="false"” 

和 

web.config中新增“<httpRuntime requestValidationMode="2.0"/>

但這種關閉驗證機制的辦法總感覺心裡不踏實,危險重重,下面我說一種我的解決辦法,使風險變的可控。

其實也很簡單:

ajax我使用的較多,取值都會在js中,那麼我決定將值取出後使用js進行加工和判斷。

首先,導致報錯的一般是<p>這樣的格式標記,那麼我們對照“Server.HtmlEncode”編碼格式進行一下轉換。

這裡要使用js的replace(a,b)替換方法進行全部替換,而方法預設只會替換第一個,所以我們要使用第一個引數的正則格式來替換全部的:

str.replace(/</g, '&lt;') //將 < 替換為 &lt;

str.replace(/>/g, '&gt;') //將 > 替換為 &gt;

第一個引數正則格式,兩個/之間為要替換的內容,最後的g為全文匹配標示符

這樣就會吧所有的<>都替換掉,此時將不會報錯,同樣你可以繼續增加一些其它的判斷來防止一些攻擊。

在資料展示時,將這些內容直接展示在介面上,程式碼將不會被執行,而是展示出來。

如果需要程式碼執行,那麼在服務端可以使用 Server.HtmlDecode() 方法將資料解碼,再將資料輸出到介面,程式碼就會被執行。

雖然不會絕對的安全,但是你已經可以對風險做到心中有數,比起關閉驗證機制要好的多,也更靈活。