<a href="http://blog.51cto.com/hanchaohan/%5C">了解一些内容,别人的文章</a>
我們這裡隻是一個簡單的例子,不全,我們在springmvc中做一個小的demo,
1.web.xml配置過濾器
<code><!-- XSS過濾器 --></code>
<code><</code><code>filter</code><code>></code>
<code> </code><code><</code><code>filter-name</code><code>>XSSFilter</</code><code>filter-name</code><code>></code>
<code> </code><code><</code><code>filter-class</code><code>></code>
<code> </code><code>com.hanchao.filter.XssCheckFilter</code>
<code> </code><code></</code><code>filter-class</code><code>></code>
<code> </code><code><</code><code>init-param</code><code>></code>
<code> </code><code><</code><code>param-name</code><code>>errorPath</</code><code>param-name</code><code>></code>
<code> </code><code><</code><code>param-value</code><code>>/views/error.jsp</</code><code>param-value</code><code>></code>
<code> </code><code></</code><code>init-param</code><code>></code>
<code> </code><code><</code><code>param-name</code><code>>excludePaths</</code><code>param-name</code><code>></code>
<code> </code><code><</code><code>param-value</code><code>>/login</</code><code>param-value</code><code>></code>
<code> </code><code></</code><code>init-param</code><code>> </code>
<code></</code><code>filter</code><code>></code>
<code><</code><code>filter-mapping</code><code>></code>
<code> </code><code><</code><code>url-pattern</code><code>>/*</</code><code>url-pattern</code><code>></code>
<code></</code><code>filter-mapping</code><code>></code>
2.過濾器代碼:
<code>package</code> <code>com.kongzhong.passport.filter;</code>
<code>import</code> <code>java.io.IOException;</code>
<code>import</code> <code>java.util.Enumeration;</code>
<code>import</code> <code>javax.servlet.Filter;</code>
<code>import</code> <code>javax.servlet.FilterChain;</code>
<code>import</code> <code>javax.servlet.FilterConfig;</code>
<code>import</code> <code>javax.servlet.ServletException;</code>
<code>import</code> <code>javax.servlet.ServletRequest;</code>
<code>import</code> <code>javax.servlet.ServletResponse;</code>
<code>import</code> <code>javax.servlet.http.HttpServletRequest;</code>
<code>import</code> <code>javax.servlet.http.HttpServletResponse;</code>
<code>import</code> <code>com.kongzhong.base.util.KzStringUtil;</code>
<code>public</code> <code>class</code> <code>XSSCheckFilter </code><code>implements</code> <code>Filter {</code>
<code> </code><code>private</code> <code>FilterConfig config;</code>
<code> </code><code>private</code> <code>static</code> <code>String errorPath;</code><code>//出錯跳轉的目的地</code>
<code> </code><code>private</code> <code>static</code> <code>String[] excludePaths;</code><code>//不進行攔截的url</code>
<code> </code><code>private</code> <code>static</code> <code>String[] safeless = {</code><code>"<script"</code><code>, </code><code>//需要攔截的JS字元關鍵字</code>
<code> </code><code>"</script"</code><code>,</code>
<code> </code><code>"<iframe"</code><code>,</code>
<code> </code><code>"</iframe"</code><code>,</code>
<code> </code><code>"<frame"</code><code>,</code>
<code> </code><code>"</frame"</code><code>,</code>
<code> </code><code>"set-cookie"</code><code>,</code>
<code> </code><code>"%3cscript"</code><code>,</code>
<code> </code><code>"%3c/script"</code><code>,</code>
<code> </code><code>"%3ciframe"</code><code>,</code>
<code> </code><code>"%3c/iframe"</code><code>,</code>
<code> </code><code>"%3cframe"</code><code>,</code>
<code> </code><code>"%3c/frame"</code><code>,</code>
<code> </code><code>"src=\"javascript:"</code><code>,</code>
<code> </code><code>"<body"</code><code>,</code>
<code> </code><code>"</body"</code><code>,</code>
<code> </code><code>"%3cbody"</code><code>,</code>
<code> </code><code>"%3c/body"</code><code>,</code>
<code> </code><code>//"<",</code>
<code> </code><code>//">",</code>
<code> </code><code>//"</",</code>
<code> </code><code>//"/>",</code>
<code> </code><code>//"%3c",</code>
<code> </code><code>//"%3e",</code>
<code> </code><code>//"%3c/",</code>
<code> </code><code>//"/%3e"</code>
<code> </code><code>};</code>
<code> </code><code>public</code> <code>void</code> <code>doFilter(ServletRequest req, ServletResponse resp,</code>
<code> </code><code>FilterChain filterChain) </code><code>throws</code> <code>IOException, ServletException { </code>
<code> </code><code>Enumeration params = req.getParameterNames();</code>
<code> </code><code>HttpServletRequest request = (HttpServletRequest) req;</code>
<code> </code><code>HttpServletResponse response = (HttpServletResponse) resp;</code>
<code> </code><code>//String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/";</code>
<code> </code>
<code> </code><code>boolean</code> <code>isSafe = </code><code>true</code><code>;</code>
<code> </code><code>String requestUrl = request.getRequestURI();</code>
<code> </code><code>//String queryUrl = request.getQueryString();</code>
<code> </code><code>//System.out.println("params:" + params + " , requestUrl:" + requestUrl + " , queryUrl" + queryUrl);</code>
<code> </code><code>if</code><code>(isSafe(requestUrl)) {</code>
<code> </code><code>requestUrl = requestUrl.substring(requestUrl.indexOf(</code><code>"/"</code><code>));</code>
<code> </code><code>if</code><code>(!excludeUrl(requestUrl)) {</code>
<code> </code><code>while</code> <code>(params.hasMoreElements()) {</code>
<code> </code><code>String cache = req.getParameter((String) params.nextElement());</code>
<code> </code><code>if</code><code>(KzStringUtil.isNotBlank(cache)) {</code>
<code> </code><code>if</code><code>(!isSafe(cache)) {</code>
<code> </code><code>isSafe = </code><code>false</code><code>;</code>
<code> </code><code>break</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>isSafe = </code><code>false</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>if</code><code>(!isSafe) {</code>
<code> </code><code>request.setAttribute(</code><code>"err"</code><code>, </code><code>"您輸入的參數有非法字元,請輸入正确的參數!"</code><code>);</code>
<code> </code><code>request.getRequestDispatcher(errorPath).forward(request, response);</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>filterChain.doFilter(req, resp);</code>
<code> </code><code>}</code>
<code> </code><code>private</code> <code>static</code> <code>boolean</code> <code>isSafe(String str) {</code>
<code> </code><code>if</code><code>(KzStringUtil.isNotBlank(str)) { </code>
<code> </code><code>for</code> <code>(String s : safeless) {</code>
<code> </code><code>if</code><code>(str.toLowerCase().contains(s)) {</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code> </code>
<code> </code><code>private</code> <code>boolean</code> <code>excludeUrl(String url) { </code>
<code> </code><code>if</code><code>(excludePaths != </code><code>null</code> <code>&& excludePaths.length > </code><code>0</code><code>) { </code>
<code> </code><code>for</code> <code>(String path : excludePaths) {</code>
<code> </code><code>if</code><code>(url.toLowerCase().equals(path)) {</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code> </code><code>return</code> <code>false</code><code>;</code>
<code> </code><code>public</code> <code>void</code> <code>destroy() {</code>
<code> </code><code>public</code> <code>void</code> <code>init(FilterConfig config) </code><code>throws</code> <code>ServletException {</code>
<code> </code><code>this</code><code>.config = config;</code>
<code> </code><code>errorPath = config.getInitParameter(</code><code>"errorPath"</code><code>);</code>
<code> </code><code>String excludePath = config.getInitParameter(</code><code>"excludePaths"</code><code>);</code>
<code> </code><code>if</code><code>(KzStringUtil.isNotBlank(excludePath)) {</code>
<code> </code><code>excludePaths = excludePath.split(</code><code>","</code><code>);</code>
<code>}</code>
<a href="https://github.com/finn-no/xss-html-filter" target="_blank">https://github.com/finn-no/xss-html-filter</a>
本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1232119,如需轉載請自行聯系原作者