我有一個控件,我在寫關於.NET的內置請求驗證,以防止XSS攻擊和類似的錯誤。以編程方式關閉請求驗證
該控件允許網站所有者調整該頁面上的內容。如果他們願意,他們可能會輸入標記。由於它是他們的網站進行編輯,他們必須能夠在那裏粘貼他們想要的任何內容。
我想知道是否有可能以編程方式禁用此驗證?
我能找到的唯一方法是通過在web.config中完全關閉請求驗證或使用頁面指令。出於各種原因,我不能在另一個頁面中使用此控件 - 因此該選項已停用。
我有一個控件,我在寫關於.NET的內置請求驗證,以防止XSS攻擊和類似的錯誤。以編程方式關閉請求驗證
該控件允許網站所有者調整該頁面上的內容。如果他們願意,他們可能會輸入標記。由於它是他們的網站進行編輯,他們必須能夠在那裏粘貼他們想要的任何內容。
我想知道是否有可能以編程方式禁用此驗證?
我能找到的唯一方法是通過在web.config中完全關閉請求驗證或使用頁面指令。出於各種原因,我不能在另一個頁面中使用此控件 - 因此該選項已停用。
在System.Web.Configuration
PagesSection pageSection = new PagesSection();
pageSection.ValidateRequest = false;
@克里斯導致我在正確的方向。
我所做的是關閉web.config中的設置,並使用HTTP模塊爲用戶不在EditMode中的所有請求執行請求驗證。
在.NET 2.0中,Request類中有一個名爲ValidateInput的方法。即使它在web.config中關閉,也會執行驗證。
這裏概述的答案都不夠。由於配置項是隻讀的,因此您首先需要修改它們以便寫入。此外,自.NET 4發佈以來,您還需要修改HttpRuntime.RequestValidationMode
屬性,然後才能識別此Pages.ValidateRequest
屬性。
public void ModifiyValidation(bool validate) {
var pagesSection = System.Configuration.ConfigurationManager.GetSection("system.web/pages") as PagesSection;
var httpRuntime = System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
if (pagesSection != null && httpRuntime != null && pagesSection.ValidateRequest != validate)
{
var fi = typeof (ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(pagesSection, false);
fi.SetValue(httpRuntime, false);
pagesSection.ValidateRequest = validate;
httpRuntime.RequestValidationMode = new Version(validate ? "4.0" : "2.0");
fi.SetValue(pagesSection, true);
fi.SetValue(httpRuntime, true);
}
}
你也應該知道,只會在激活以下請求。
你不需要得到實際的配置部分?我需要這樣做來讀取值,否則我只是得到了默認值。雖然(?)可能會有所不同。 var PagesSection = System.Configuration.ConfigurationManager.GetSection(「system.web/pages」)爲PagesSection; – misteraidan 2011-09-13 01:04:07