含有HTML碼的欄位寫入資料庫處理方法
症狀
'/' 應用程式中發生伺服器錯誤。
--------------------------------------------------------------------------------
具有潛在危險 Request.Form 的值已從用戶端 (txtXmlMyGrid3="...whzuSH51Z2OnMbsXbDg==") 偵測到。
描述: 要求驗證偵測到具有潛在危險的用戶端輸入值,對這個要求的處理已經中止。這個值可能表示有人嘗試危害應用程式的安全性,例如跨站台的指令碼處理攻擊。您可以在 Page 指示詞或 組態區段中設定 validateRequest=false 來停用要求驗證。但是我們強列建議您的應用程式應該明確地檢查所有這類的輸入。
例外詳細資訊: System.Web.HttpRequestValidationException: 具有潛在危險 Request.Form 的值已從用戶端 (txtXmlMyGrid3="...whzuSH51Z2OnMbsXbDg==") 偵測到。
原因
表單數據回寫資料庫時,.NET Framework會對表單數據檢查,使得表單欄位的值不得有任何的 HTML 代碼或類似HTML代碼。
以避免sql注入攻擊。
而txtXmlMyGrid3保存的是XML,含特殊字符 < >。XML和HTML都是標記語言,結構相似。所以出現次錯誤。
解決方法
當表單數據需回寫資料庫,欄位的值含HTML碼時,可採用
1 讓程式順利運行
○修改webconfig或aspx檔案中的第一行Page 項目
○ <configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
○ <%@ Page validateRequest="false" %>
2 加強程式的安全性
○客戶端驗證。用戶輸入時,檢查內容是否符合要求。
○對輸入的內容編碼。常用方法:
使用HtmlEncode函數
Dim s As String = Server.HtmlEncode(Me.TextBox1.Text)
○在服務器端,檢查用戶輸入的內容。
○數據寫入DB時,使用參數。以處理特殊字符和sql注入。
○讀取數據時,解碼。常用方法:
使用HtmlDecode函數
Me.TextBox3.Text = Server.HtmlDecode(Me.TextBox1.Text)