1. 程式人生 > >VS2008.NET對ashx頁面防止跨站攻擊(XSS)

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引數的時候,有特殊字元的時候程式就會提示有潛在危險而報出異常了。

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