.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"))

    全站熱搜

    Smïlë 發表在 痞客邦 留言(0) 人氣()