本篇文章給大家帶來的內容是關于xss過濾器如何配置?xss過濾器配置方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1.XSS是什么?
跨站腳本(cross site script)簡稱為XSS,是一種經常出現在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。
XSS是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,使別的用戶訪問都會執行相應的嵌入代碼。
2.XSS攻擊的危害
1、盜取用戶資料,比如:登錄帳號、網銀帳號等
2、利用用戶身份,讀取、篡改、添加、刪除企業敏感數據等
3、盜竊企業重要的具有商業價值的資料
4、非法轉賬
5、強制發送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發起攻擊
3.防止XSS解決方案
XSS的根源主要是沒完全過濾客戶端提交的數據 ,所以重點是要過濾用戶提交的信息。
?將重要的Cookie標記為http only, 這樣的話JS 中的document.cookie語句就不能獲取到cookie了.
?只允許用戶輸入我們期望的數據。 例如:age用戶年齡只允許用戶輸入數字,而數字之外的字符都過濾掉。
?對數據進行html Encode 處理: 用戶將數據提交上來的時候進行HTML編碼,將相應的符號轉換為實體名稱再進行下一步的處理。
?過濾或移除特殊的Html標簽, 例如: <script>, <iframe> , < for <, > for >, " for</script>
?過濾js事件的標簽。例如 “onclick=”, “onfocus” 等等。
項目以SpringBoot項目為例:
XssFilter:
import?javax.servlet.*; import?javax.servlet.http.HttpServletRequest; import?java.io.IOException; import?java.util.List; @Compent public?class?XssFilter?implements?Filter?{ FilterConfig?filterConfig?=?null; private?List<string>?urlExclusion?=?null; public?void?init(FilterConfig?filterConfig)?throws?ServletException?{ this.filterConfig?=?filterConfig; } public?void?destroy()?{ this.filterConfig?=?null; } public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)?throws?IOException,?ServletException?{ HttpServletRequest?httpServletRequest?=?(HttpServletRequest)?request; String?servletPath?=?httpServletRequest.getServletPath(); if?(urlExclusion?!=?null?&&?urlExclusion.contains(servletPath))?{ chain.doFilter(request,?response); }?else?{ chain.doFilter(new?XssHttpServletRequestWrapper((HttpServletRequest)?request),?response); } } public?List<string>?getUrlExclusion()?{ return?urlExclusion; } public?void?setUrlExclusion(List<string>?urlExclusion)?{ this.urlExclusion?=?urlExclusion; } }</string></string></string>
XssHttpServletRequestWrapper:
import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletRequestWrapper; public?class?XssHttpServletRequestWrapper?extends?HttpServletRequestWrapper?{ public?XssHttpServletRequestWrapper(HttpServletRequest?servletRequest)?{ super(servletRequest); } public?String[]?getParameterValues(String?parameter)?{ String[]?values?=?super.getParameterValues(parameter); if?(values?==?null)?{ return?null; } int?count?=?values.length; String[]?encodedValues?=?new?String[count]; for?(int?i?=?0;?i?",?"&?gt;"); value?=?value.replaceAll("(",?"&?#40;")。replaceAll(")",?"&?#41;"); value?=?value.replaceAll("'",?"&?#39;"); value?=?value.replaceAll("eval((。*))",?""); value?=?value.replaceAll("["'][s]*javascript:(。*)["']",?""""); value?=?value.replaceAll("script",?""); return?value; } }