.Net的網站操作中,有時會出現『具有潛在危險 Request.Form 的值已從用戶端偵測到』的錯誤訊息。
這是由於微軟為了避免類似 SQL Inject 之類的駭客攻擊,在頁面PostBack後自動加入了一個額外的檢查(此功能在ASP.NET中是預設開啟的),TextBox、Html編輯器(如FckEditor)之類的控制項中不得有任何的HTML語法;且 ASP.NET 4.0 並不是和 2.0 一樣只有檢查頁面,對於頁面的檢查範圍是提高到所有的Request,所以從 BeginRequest 就會開始檢查 。
解釋完後你一定想說:「那就把檢查的功能關閉就好啦!」
可以透過在頁面的Page指示詞中加入 validateRequest="False" 來關閉這個功能:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test123.aspx.vb" Inherits="Test" validateRequest="False" %>
或是在 web.config 設定檔關閉:
<system.web>
<pages validateRequest="False" />
</system.web>
不過,如此一來網頁程式中就該在輸入欄位加上HttpUtility.HtmlEncode方法,將字串轉換為 HTML 編碼的字串,再用HttpUtility.HtmlDecode將已經為 HTTP 傳輸而進行 HTML 編碼的字串轉換為解碼的字串,以避免駭客的惡意攻擊。
加密:
URL="Test123.aspx?id=" & HttpUtility.HtmlEncode(id.text)
Server.Transfer(URL)
解密:
ID=HttpUtility.HtmlDecode(Request("id"))
留言列表