java 防止xss攻击

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html#xsshappen

这里说下最近项目中我们的解决方案,主要用到commons-lang3-3.1.jar这个包的org.apache.commons.lang3.StringEscapeUtils.escapeHtml4()这个方法。

解决过程主要在用户输入和显示输出两步:在输入时对特殊字符如<>" ‘ & 转义,在输出时用jstl的fn:excapeXml("fff")方法。

其中,输入时的过滤是用一个filter来实现,

实现过程:

在web.xml加一个filter

Xml代码  

  1. <filter>
  2. <filter-name>XssEscape</filter-name>
  3. <filter-class>cn.pconline.morden.filter.XssFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>XssEscape</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. <dispatcher>REQUEST</dispatcher>
  9. </filter-mapping>

XssFilter 的实现方式是实现servlet的Filter接口

Java代码  

  1. package cn.pconline.morden.filter;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletRequest;
  10. public class XssFilter implements Filter {
  11. @Override
  12. public void init(FilterConfig filterConfig) throws ServletException {
  13. }
  14. @Override
  15. public void doFilter(ServletRequest request, ServletResponse response,
  16. FilterChain chain) throws IOException, ServletException {
  17. chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
  18. }
  19. @Override
  20. public void destroy() {
  21. }
  22. }

关键是XssHttpServletRequestWrapper的实现方式,继承servlet的HttpServletRequestWrapper,并重写相应的几个有可能带xss攻击的方法,如:

Java代码  

  1. package cn.pconline.morden.filter;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletRequestWrapper;
  4. import org.apache.commons.lang3.StringEscapeUtils;
  5. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
  6. public XssHttpServletRequestWrapper(HttpServletRequest request) {
  7. super(request);
  8. }
  9. @Override
  10. public String getHeader(String name) {
  11. return StringEscapeUtils.escapeHtml4(super.getHeader(name));
  12. }
  13. @Override
  14. public String getQueryString() {
  15. return StringEscapeUtils.escapeHtml4(super.getQueryString());
  16. }
  17. @Override
  18. public String getParameter(String name) {
  19. return StringEscapeUtils.escapeHtml4(super.getParameter(name));
  20. }
  21. @Override
  22. public String[] getParameterValues(String name) {
  23. String[] values = super.getParameterValues(name);
  24. if(values != null) {
  25. int length = values.length;
  26. String[] escapseValues = new String[length];
  27. for(int i = 0; i < length; i++){
  28. escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
  29. }
  30. return escapseValues;
  31. }
  32. return super.getParameterValues(name);
  33. }
  34. }

到此为止,在输入的过滤就完成了。

在页面显示数据的时候,只是简单地用fn:escapeXml()对有可能出现xss漏洞的地方做一下转义输出。

复杂内容的显示,具体问题再具体分析。

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

时间: 2024-10-11 21:48:46

java 防止xss攻击的相关文章

java 防止 XSS 攻击的常用方法总结

在前面的一篇文章中,讲到了java web应用程序防止 csrf 攻击的方法,参考这里 java网页程序采用 spring 防止 csrf 攻击.,但这只是攻击的一种方式,还有其他方式,比如今天要记录的 XSS 攻击, XSS 攻击的专业解释,可以在网上搜索一下,参考百度百科的解释 http://baike.baidu.com/view/2161269.htm, 但在实际的应用中如何去防止这种攻击呢,下面给出几种办法.1. 自己写 filter 拦截来实现,但要注意的时,在WEB.XML 中配置

java 防止 XSS 攻击的常用方法

1. 自己写 filter 拦截来实现,但要注意的时,在WEB.XML 中配置 filter 的时候,请将这个 filter 放在第一位.2. 采用开源的实现 ESAPI library ,参考网址: https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API 3. 可以采用spring 里面提供的工具类来实现. 一, 第一种方法.web.xml文件Filter配置 <!-- 配置防SQL注入过滤器 --> &l

Java防止XSS攻击

方法一: 1.添加XssFilter @Configuration public class XssFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletRespon

360[警告]跨站脚本攻击漏洞/java web利用Filter防止XSS/Spring MVC防止XSS攻击

就以这张图片作为开篇和问题引入吧 <options>问题解决办法请参考上一篇 如何获取360站长邀请码,360网站安全站长邀请码 首先360能够提供一个这样平台去检测还是不错的.但是当体检出来 看到漏洞报告,以为360会像windows上360安全卫士一样帮我们打好补丁.但是实际发现漏洞是要自己修复,并且php和asp aspx有360提供的补丁或者解决方案(想要看这些方案之前要申请为站长但是需要邀请码 这个可以在页面 页面左下角 360主机卫士感恩卡里面领取). 进入修复方案后发现java几

Java xss攻击(跨站脚本攻击)

发现问题 最近我们的服务器频繁的遭到黑客攻击,真是让人头疼啊,痛定思痛,仔细想想为什么我们会被攻击呢,肯定是我们的代码有漏洞啊,那么我们如何检测我们站点的漏洞呢,首先比较大众的就是通过360网站安全检测(http://webscan.360.cn/),但是发现这个太简单了,不够专业,那么我们再来一个专业的Acunetix Web Vulnerability Scanner,这个软件是收费的,但是我是一个穷人所以就不买了,请原谅.如果你也很穷请到这里下载试用,链接: http://pan.baid

java防范跨站脚本攻击(XSS)

网络中心提示网站有数目众多的跨站脚本攻击(XSS)漏洞,经过查看代码,认为是JSP中绑定变量是未经处理直接写入的,而且整个项目中这样的做法太多,因为是多年前的,不好一个个更改,参照网上资料,通过加filter对数据参数进行处理. 1.在github上下载lucy-xss-servlet-filter:https://github.com/naver/lucy-xss-servlet-filter 2.打开项目lucy-xss-servlet-filter,将下载代码输出为jar包. 项目输出为j

SQL 注入、XSS 攻击、CSRF 攻击

SQL 注入.XSS 攻击.CSRF 攻击 SQL 注入 什么是 SQL 注入 SQL 注入,顾名思义就是通过注入 SQL 命令来进行攻击,更确切地说攻击者把 SQL 命令插入到 web 表单或请求参数的查询字符串里面提交给服务器,从而让服务器执行编写的恶意的 SQL 命令. 对于 web 开发者来说,SQL 注入已然是非常熟悉的,而且 SQL 注入已经生存了 10 多年,目前已经有很成熟的防范方法,所以目前的 web 应用都很少会存在漏洞允许进行 SQL 注入攻击. 除非是入门开发人员,在开发

防御XSS攻击的七条原则

本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS Attack><DOM Based XSS> 攻击者可以利用XSS漏洞向用户发送攻击脚本,而用户的浏览器因为没有办法知道这段脚本是不可信的,所以依然会执行它.对于浏览器而言,它认为这段脚本是来自可以信任的服务器的,所以脚本可以光明正大地访问Cookie,或者保存在浏览器里被当前网站所用的敏感

WEB安全实战(三)XSS 攻击的防御

前言 上篇文章中提到了 XSS 攻击,而且,也从几个方面介绍了 XSS 攻击带来的严重影响.那么,这篇文章中,主要是针对 XSS 攻击做一个基本的防御,看看可以通过几种方式来修复这个特别常见的安全漏洞. 由于公司用的是 SpringMVC,因此,这次就主要基于 SpringMVC 来解决这些漏洞.当然,其实这些解决方案都是大同小异,对于什么环境来说根本无所谓.了解了原理,什么环境.什么语言都可以运用自如了.废话就不多说了,直接上解决方案. 解决方案 方案一 方案一主要是利用了 SpringMVC