• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

利用 filter 和 commons-lang3 过滤掉xss攻击

JAVA web前端中文站 3年前 (2017-09-27) 1136次浏览 已收录 0个评论

Web 安全越来越重要,Web 开发者一定听说过 XSS 攻击,但不一定知道如何防御它,本文将借助 filter 过滤器配合 XssHttpServletRequestWrapper 以及 commons-lang3-3.1.jar 来过滤掉危险的 XSS 攻击。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

本文主要用到了 commons-lang3-3.1.jar 这个包的 org.apache.commons.lang3.StringEscapeUtils.escapeHtml4() 这个方法。

什么是 XSS 攻击?

XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS,XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。

说白了,XSS 攻击就是利用 JavaScript,html 等对目标页面进行改造,或者说是伪造,用来获取账号密码,操作系统权限等的一种方式。

知道了 XSS 攻击的原理,下面我们就一起来过滤掉这类漏洞。

过滤 XSS 攻击的原理

通过上面的介绍我们知道了 XSS 攻击。那么我们就需要在输入时对特殊字符如<>" ' & 转义。然后在页面显示时,在转换过来。

了解了这些后,我们先来实现一个 XssFilter 用来拦截用户的输入请求。

 package com.lisa33xiaoq.net.filter;       import java.io.IOException;    import javax.servlet.Filter;   import javax.servlet.FilterChain;   import javax.servlet.FilterConfig;   import javax.servlet.ServletException;   import javax.servlet.ServletRequest;   import javax.servlet.ServletResponse;   import javax.servlet.http.HttpServletRequest;    public class XssFilter implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {  }    @Override    public void doFilter(ServletRequest request, ServletResponse response,      FilterChain chain) throws IOException, ServletException {     chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);    }    @Override    public void destroy() {}   }  

我们再实现一个用来 XssHttpServletRequestWrapper 过滤用户的输入内容。

 package com.lisa33xiaoq.net.filter;   import javax.servlet.http.HttpServletRequest;   import javax.servlet.http.HttpServletRequestWrapper;   import org.apache.commons.lang3.StringEscapeUtils;   public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {    public XssHttpServletRequestWrapper(HttpServletRequest request) {     super(request);    }    @Override    public String getHeader(String name) {     return StringEscapeUtils.escapeHtml4(super.getHeader(name));    }    @Override    public String getQueryString() {     return StringEscapeUtils.escapeHtml4(super.getQueryString());    }    @Override    public String getParameter(String name) {     return StringEscapeUtils.escapeHtml4(super.getParameter(name));    }    @Override    public String[] getParameterValues(String name) {     String[] values = super.getParameterValues(name);     if(values != null) {      int length = values.length;      String[] escapseValues = new String[length];      for(int i = 0; i < length; i++){       escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);      }      return escapseValues;     }     return super.getParameterValues(name);    }   }

最后在 web.xml 中配置该 filter。

 <filter>    <filter-name>XssEscape</filter-name>    <filter-class>com.lisa33xiaoq.net.filter.XssFilter</filter-class>   </filter>   <filter-mapping>    <filter-name>XssEscape</filter-name>    <url-pattern>/*</url-pattern>    <dispatcher>REQUEST</dispatcher>   </filter-mapping>

最后在 jsp 页面上使用 jstl 标签 fn:escapeXml("") 对需要转移的内容进行转换显示。

有些情况不想显示过滤后内容的话,可以用 StringEscapeUtils.unescapeHtml4()这个方法,把 StringEscapeUtils.escapeHtml4()转义之后的字符恢复原样。

本文原文出处:web 前端中文站: » 利用 filter 和 commons-lang3 过滤掉 xss 攻击

【注:本文源自网络文章资源,由站长整理发布】


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:利用 filter 和 commons-lang3 过滤掉 xss 攻击
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址