這兩天做項目的時候偶然發現項目中的保存功能的時候出現這樣的異常:異常詳細信息: System.Web.HttpRequestValidationException: 從客戶端(XXXX)中檢測到有潛在危險的 Request.Form 值。經過查詢調試發現,保存的文本中存在回車符,<br/>標簽作為參 ...
這兩天做項目的時候偶然發現項目中的保存功能的時候出現這樣的異常:異常詳細信息: System.Web.HttpRequestValidationException: 從客戶端(XXXX)中檢測到有潛在危險的 Request.Form 值。經過查詢調試發現,保存的文本中存在回車符,<br/>標簽作為參數的值的一部分傳到後臺了,被後臺檢測出有潛在的風險。
首先的想法就是在請求後臺之前把參數處理成不含<br/>標簽的形式,前臺保存取值的時候用的是prototype中的form.serialize()的方法,傳的時候時已經編碼過的值,但是不知道為什麼用new Ajax.Request請求後臺是時候,還是包含<br/>的標簽,從而導致了該異常的出現,改成jQuery的form.serialize()的方法取得值和prototype取得值是一致的,用jQuery.Ajax請求的時候就沒有這個問題,這樣把prototype有關的代碼都改成jQuery問題得以解決,但是目前的這個項目大部分都是用prototype做的,換起來比較麻煩,所以必須尋找一個其他的方法來處理這個問題。(以後有時間會查一下prototype為什麼會出現這樣的問題,大家有知道的歡迎交流學習)
asp.net可以禁用這些風險的驗證 具體的做法是:在配置文件webconfig中增加 <httpRuntime requestValidationMode="2.0" />和 <pages validateRequest="false" />兩個配置(<system.web>這個配置下),用於禁用請求驗證,這樣異常得以解決,但是這樣會方法會很不安全,如果對用戶輸入的信息安全性沒有要求的話可以採用。
目前還有沒有找到更好的方法來解決這個問題,暫時使用的是第二個方法,大家有什麼好的方法歡迎來和我交流。