“檢測到有潛在危險的 Request.Form 值”非關閉驗證的解決辦法
阿新 • • 發佈:2019-01-29
最常發生此錯誤的場景:服務端接收富文字編輯器帶格式的內容。
(不推薦)網路上通常對於《.net會報出“檢測到有潛在危險的 Request.Form 值。”》異常的解決辦法是
“ValidateRequest="false"”
和
web.config中新增“<httpRuntime
requestValidationMode=
"2.0"
/>
”
但這種關閉驗證機制的辦法總感覺心裡不踏實,危險重重,下面我說一種我的解決辦法,使風險變的可控。
其實也很簡單:
ajax我使用的較多,取值都會在js中,那麼我決定將值取出後使用js進行加工和判斷。
首先,導致報錯的一般是<p>這樣的格式標記,那麼我們對照“Server.HtmlEncode”編碼格式進行一下轉換。
這裡要使用js的replace(a,b)替換方法進行全部替換,而方法預設只會替換第一個,所以我們要使用第一個引數的正則格式來替換全部的:
str.replace(/</g, '<') //將 < 替換為 <
str.replace(/>/g, '>') //將 > 替換為 >
第一個引數正則格式,兩個/之間為要替換的內容,最後的g為全文匹配標示符
這樣就會吧所有的<>都替換掉,此時將不會報錯,同樣你可以繼續增加一些其它的判斷來防止一些攻擊。
在資料展示時,將這些內容直接展示在介面上,程式碼將不會被執行,而是展示出來。
如果需要程式碼執行,那麼在服務端可以使用 Server.HtmlDecode() 方法將資料解碼,再將資料輸出到介面,程式碼就會被執行。
雖然不會絕對的安全,但是你已經可以對風險做到心中有數,比起關閉驗證機制要好的多,也更靈活。