ASP.net中的validaterequest
生活随笔
收集整理的這篇文章主要介紹了
ASP.net中的validaterequest
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個屬性是用來驗證客戶端用戶的輸入的,用來驗證用戶的輸入中是否有危險字符的,這個屬性的默認值為true,微軟之所以這么做是為了提高asp.net程序的安全性,所以很多程序員即使不知道怎么來防御黑客的攻擊,asp.net的一些默認屬性等內容已經對安全進行了控制,這也是為什么asp.net的程序相對來說比較安全的原因!
既然這個屬性的默認值為true,而且asp.net頁面的回發又很頻繁,那么如果沒有用戶的交互的地方,這樣asp.net 豈不是每次都要去嚴整呢,這樣也是有可能會來回的損耗系統的執行時間的,至于:如果沒有客戶端的交互的話,到底asp.net會不會去驗證這是微軟的工程師的問題了,對于我們來說,如果沒有客戶端交互的地方,我感覺是應該將此屬性設置為 false的,這樣的話無論 微軟的工程師怎樣設計,對我們程序的本身是沒有任何影響的!
直接關閉這個屬性的方法是:
1、在aspx頁面的屬性里寫“validaterequest="false"”
2、在web.config里設置
<configuration>
?? <system.web>
??????<pages validateRequest="false"/>
?? </system.web>
</configuration>
但是當需要跟用戶交互的地方,我們就要用它的默認值了,可是事情可能并沒有我們想象的那么簡單,也沒有那么完美,當用戶在使用一些html編輯器的時候,自己本身提交的字符里就有等這樣的字符,這樣就要求程序員必須要關閉validaterequest 屬性,這個時候我們又該怎樣的來控制asp.net頁面的安全性能呢?
當然了,這個地方我們可以來對一切危險字符進行過濾,這樣可能提高一些安全性,但是我們防止用戶的輸入可能考慮的會有遺漏,這樣就導致了安全還會是有問題的,我們可以反過來考慮我們到底需要提交多少特殊字符,然后對我們提交的特殊字符進行轉義或替換,這樣我們就又可以將validaterequest的屬性設置為true了,這樣既解決了程序的安全問題又滿足了我們的需求!
有時候在與用戶進行交互的時候,用戶難免的會有輸入特殊字符的時候,因為我們設置的validaterequest 的值 為true所以頁面會不給任何提示的前提下, 直接輸出一大頁的錯誤信息, 這樣可能就導致了用戶的誤解,他們可能認為是我們網站出了問題,用戶不可能會想到他輸入了非法的字符! 對于這種情況我們又該怎么辦呢?
答案是可以使用Page_Error的處理事件:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("您輸入的字符中有非法字符!");
Server.ClearError();
}
}
1.它所在的命名空間:System.Web.Configuration
2.程序集:System.Web(在 system.web.dll 中)
3.所在的類:pagesSection
至于在最新的MVC模式中如何關閉這個屬性,方法如下(超簡單):
[ValidateInput(false)]
public ActionResult Index()??
{
????return View();
}
既然這個屬性的默認值為true,而且asp.net頁面的回發又很頻繁,那么如果沒有用戶的交互的地方,這樣asp.net 豈不是每次都要去嚴整呢,這樣也是有可能會來回的損耗系統的執行時間的,至于:如果沒有客戶端的交互的話,到底asp.net會不會去驗證這是微軟的工程師的問題了,對于我們來說,如果沒有客戶端交互的地方,我感覺是應該將此屬性設置為 false的,這樣的話無論 微軟的工程師怎樣設計,對我們程序的本身是沒有任何影響的!
直接關閉這個屬性的方法是:
1、在aspx頁面的屬性里寫“validaterequest="false"”
2、在web.config里設置
<configuration>
?? <system.web>
??????<pages validateRequest="false"/>
?? </system.web>
</configuration>
但是當需要跟用戶交互的地方,我們就要用它的默認值了,可是事情可能并沒有我們想象的那么簡單,也沒有那么完美,當用戶在使用一些html編輯器的時候,自己本身提交的字符里就有等這樣的字符,這樣就要求程序員必須要關閉validaterequest 屬性,這個時候我們又該怎樣的來控制asp.net頁面的安全性能呢?
當然了,這個地方我們可以來對一切危險字符進行過濾,這樣可能提高一些安全性,但是我們防止用戶的輸入可能考慮的會有遺漏,這樣就導致了安全還會是有問題的,我們可以反過來考慮我們到底需要提交多少特殊字符,然后對我們提交的特殊字符進行轉義或替換,這樣我們就又可以將validaterequest的屬性設置為true了,這樣既解決了程序的安全問題又滿足了我們的需求!
有時候在與用戶進行交互的時候,用戶難免的會有輸入特殊字符的時候,因為我們設置的validaterequest 的值 為true所以頁面會不給任何提示的前提下, 直接輸出一大頁的錯誤信息, 這樣可能就導致了用戶的誤解,他們可能認為是我們網站出了問題,用戶不可能會想到他輸入了非法的字符! 對于這種情況我們又該怎么辦呢?
答案是可以使用Page_Error的處理事件:
protected void Page_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex is HttpRequestValidationException)
{
Response.Write("您輸入的字符中有非法字符!");
Server.ClearError();
}
}
1.它所在的命名空間:System.Web.Configuration
2.程序集:System.Web(在 system.web.dll 中)
3.所在的類:pagesSection
至于在最新的MVC模式中如何關閉這個屬性,方法如下(超簡單):
[ValidateInput(false)]
public ActionResult Index()??
{
????return View();
}
總結
以上是生活随笔為你收集整理的ASP.net中的validaterequest的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#对话框全接触
- 下一篇: 读书笔记《如何阅读一本书》之二