validateRequest

採用 ASP.NET 開發網站可能會發生底下這樣的問題:

使用者填完form,送出資料後,系統回應下面的錯誤。

System.Web.HttpRequestValidationException: 具有潛在危險 Request.Form 的值已從用戶端

(addrm="臺北市徳行東路331巷50弄12...") 偵測到。

描述: 要求驗證偵測到具有潛在危險的用戶端輸入值,對這個要求的處理已經中止。

這個值可能表示有人嘗試危害應用程式的安全性,例如跨站台的指令碼處理攻擊。您

可以在 Page 指示詞或 組態區段中設定 validateRequest=false 來停用要求驗證。

但是我們強列建議您的應用程式應該明確地檢查所有這類的輸入。

這是由於在 .NET Framework 1.1 微軟加入了一個額外的檢查,使得 TextBox之類的控制項中不得有任何的 HTML 碼。這是避免類似 SQL Inject 之類的駭客攻擊。

您可以測試,在 1.1 環境中,只要在 TextBox 中輸入 <br>或<font>,只要任何的HTML指令都會造成這個問題,詳細的資訊可以參考:http://www.asp.net/faq//RequestValidation.aspx

解決方式可依照訊息所說,在使用到該控制項,或是TextBox需要輸入HTML指令的aspx檔案中的第一行Page 項目中,加入:

<%@ Page validateRequest="false" %>

一般來說該行已經有資料,修改完後會變成:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="book._default22" validateRequest="false" %>

或者,乾脆讓整個專案中的TextBox都可以輸入HTML,則將 web.config 檔案<system.web>和</system.web>之間加入這一行:

<pages validateRequest="false" />

成為:

<system.web>

....

<pages validateRequest="false" />

....

</system.web>

這樣整個專案中所有的TextBox都可以輸入HTML碼。