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 類使用輸入驗證標誌來跟蹤是否對通過 Cookies、Form 和QueryString 屬性訪問的請求集合執行驗證。ValidateInput 方法設定這些標誌,以便在呼叫Cookies、Form 或 QueryString 屬性的 get 訪問器時執行輸入驗證。驗證的工作原理是,將所有輸入資料與具有潛在危險的資料的硬編碼列表進行對照檢查。
如果頁指令或配置啟用了驗證功能,則在頁的 ProcessRequest 處理階段呼叫此方法。如果未啟用驗證功能,則可通過程式碼呼叫ValidateInput 方法。
SO:我在頁面加了一句
context.Request.ValidateInput();
好了,後面在使用context.Request.QueryString["id"];獲取URL引數的時候,有特殊字元的時候程式就會提示有潛在危險而報出異常了。