具有潛在危險 Request.Form 的值已從用戶端 (XXXX) 偵測到
有一種解決方式是將 validateRequest 設成false,如果是針對個別網頁的話,修改的地方如下:
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="Test.aspx.cs" Inherits="Test" validateRequest="False" %>
<system.web>
<pages validateRequest="False" />
</system.web>
<pages validateRequest="False" />
</system.web>
但若依上述方式修改,等於是讓系統開了個漏洞,所以若以上述方式修改的話,還必須要為每個控制項的值加入HtmlEncode,以防止XSS攻擊,ex.
txtBox1.Text = HttpUtility.HtmlEncode(txtBox1.Text)
第一種方式,是用Page_Error來做處理,在程式中加入如下程式:
protected void Page_Error(object sender, EventArgs e) {
if (Server.GetLastError().GetType().ToString() == "System.Web.HttpRequestValidationException") {
Response.Redirect([要導入的錯誤畫面]);
}
Server.ClearError(); //清掉錯誤,讓ASP.NET的錯誤不出現
}
if (Server.GetLastError().GetType().ToString() == "System.Web.HttpRequestValidationException") {
Response.Redirect([要導入的錯誤畫面]);
}
Server.ClearError(); //清掉錯誤,讓ASP.NET的錯誤不出現
}
另外還有一種更方便的方式:在 Global.asax新增application_error事件,程式如下:
void Application_Error(Object sender, EventArgs e)
{
if (Server.GetLastError().GetType().ToString() == "System.Web.HttpRequestValidationException") {
Response.Redirect([要導入的錯誤畫面]);
}
Server.ClearError();
}
{
if (Server.GetLastError().GetType().ToString() == "System.Web.HttpRequestValidationException") {
Response.Redirect([要導入的錯誤畫面]);
}
Server.ClearError();
}
參考資料:
http://tgw1029.blogspot.com/2010/02/requestform.html
http://social.msdn.microsoft.com/forums/zh-TW/236/thread/a4ecbacc-ffb9-49b9-bf52-93749a3e699a
http://www.dotblogs.com.tw/kirkchen/archive/2009/12/07/12314.aspx
沒有留言:
張貼留言