国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

請慎用ASP.Net的validateRequest="false"

2024-07-10 13:04:47
字體:
來源:轉載
供稿:網友
中國最大的web開發資源網站及技術社區,

  asp.net 1.1后引入了對提交表單自動檢查是否存在xss(跨站腳本攻擊)的能力。當用戶試圖用之類的輸入影響頁面返回結果的時候,asp.net的引擎會引發一個 httprequestvalidationexceptioin。默認情況下會返回如下文字的頁面:

server error in '/yourapplicationpath' application

a potentially dangerous request.form value was detected from the client
(txtname="<b>").


description: request validation has detected a potentially dangerous client input value, and processing of the request has been aborted. this value may indicate an attempt to compromise the security of your application, such as a cross-site scripting attack. you can disable request validation by setting validaterequest=false in the page directive or in the configuration section. however, it is strongly recommended that your application explicitly check all inputs in this case.

exception details: system.web.httprequestvalidationexception: a potentially dangerous request.form value was detected from the client (txtname="<b>").

....

  這是asp.net提供的一個很重要的安全特性。因為很多程序員對安全沒有概念,甚至都不知道xss這種攻擊的存在,知道主動去防護的就更少了。asp.net在這一點上做到默認安全。這樣讓對安全不是很了解的程序員依舊可以寫出有一定安全防護能力的網站。

  但是,當我google搜索 httprequestvalidationexception 或者 "a potentially dangerous request.form value was detected from the client"的時候,驚奇的發現大部分人給出的解決方案竟然是在asp.net頁面描述中通過設置 validaterequest=false 來禁用這個特性,而不去關心那個程序員的網站是否真的不需要這個特性。看得我這叫一個膽戰心驚。安全意識應該時時刻刻在每一個程序員的心里,不管你對安全的概念了解多少,一個主動的意識在腦子里,你的站點就會安全很多。

  為什么很多程序員想要禁止 validaterequest 呢?有一部分是真的需要用戶輸入"<>"之類的字符。這就不必說了。還有一部分其實并不是用戶允許輸入那些容易引起xss的字符,而是討厭這種報錯的形式,畢竟一大段英文加上一個asp.net典型異常錯誤信息,顯得這個站點出錯了,而不是用戶輸入了非法的字符,可是自己又不知道怎么不讓它報錯,自己來處理報錯。

  對于希望很好的處理這個錯誤信息,而不使用默認asp.net異常報錯信息的程序員們,你們不要禁用validaterequest=false。

  正確的做法是在你當前頁面添加page_error()函數,來捕獲所有頁面處理過程中發生的而沒有處理的異常。然后給用戶一個合法的報錯信息。如果當前頁面沒有page_error(),這個異常將會送到global.asax的application_error()來處理,你也可以在那里寫通用的異常報錯處理函數。如果兩個地方都沒有寫異常處理函數,才會顯示這個默認的報錯頁面呢。

  舉例而言,處理這個異常其實只需要很簡短的一小段代碼就夠了。在頁面的code-behind頁面中加入這么一段代碼:

protected void page_error(object sender, eventargs e)
{
    exception ex 
= server.getlasterror();
    
if (ex is httprequestvalidationexception)
    
{
        response.write(
"請您輸入合法字符串。");
        server.clearerror(); 
// 如果不clearerror()這個異常會繼續傳到application_error()。
    }

}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沾化县| 巴塘县| 孟州市| 瓮安县| 甘南县| 南雄市| 林口县| 丰原市| 余姚市| 留坝县| 旅游| 汤原县| 凤凰县| 乌鲁木齐市| 兴业县| 永平县| 阳原县| 合水县| 甘洛县| 巴林右旗| 本溪市| 西贡区| 尉氏县| 馆陶县| 沂水县| 波密县| 新闻| 罗源县| 万州区| 林芝县| 绥滨县| 轮台县| 昭苏县| 临武县| 双桥区| 航空| 昌江| 青海省| 体育| 镇坪县| 邯郸市|