首先,給大家貼出解決方案,很簡單,只需要加一句代碼就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參數的時候,有特殊字符的時候程序就會提示有潛在危險而報出異常了。
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>