java XSS攻击防护

时间:2024-11-15 16:57:26
首先说一下什么是XSS攻击
	XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,
故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web
用户将代码植入到提供给其它用户使用的页面中。
白话解释
	说白了xss攻击就是jq或html代码攻击,用户提交的数据是jq或html代码,
	前台拿到数据库中查出的jq或html代码,浏览器会直接解析执行
实现思路
	重写()方法,在controller获取参数之前进行jq代码转换,也就是将
	<Script>所有标签代码进行替换,在这里要注意,HttpServletRequest是个接口,
	它的实现类是HttpServletRequestWrapper,所以只需要继承HttpServletRequestWrapper,
	重写方法,在通过过滤器将原本的HttpServeltRequest替换为自定义的HttpServeltRequest
代码
1.自定义类继承HttpServletRequestWrapper重写getParamter
package ;

import ;
import ;

import ;
import ;

/**
 * ClassName    XssHttpServletRequestWrapper
 * Package	    
 * Description
 *
 * @author cyf
 * @date 2019/4/22 9:24
 */
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {

    /**
     * Constructs a request object wrapping the given request.
     *
     * @param request The request to wrap
     * @throws IllegalArgumentException if the request is null
     */
    public XssHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {
        String parameter = (name);
        if((parameter)){
       		 //这里使用的阿帕奇的common-lang3中的转义html方法,也可以自己实现,
            String escapeParameter = (parameter);
            (escapeParameter);
            return escapeParameter;
        }
        return null;
    }
}


2.自定义过滤器,使用自定义的HttpServletRequest
package ;

import ;
import ;

import .*;
import ;
import ;
import ;

/**
 * ClassName    XssFilter
 * Package	    
 * Description
 *
 * @author cyf
 * @date 2019/4/22 9:23
 */

@Component
@WebFilter(urlPatterns = {"/*"},filterName = "xssFilter")
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 {
        XssHttpServletRequestWrapper req=new XssHttpServletRequestWrapper((HttpServletRequest)request);
        (req,response);
    }

    @Override
    public void destroy() {

    }
}

总结
实现方式特别简单,主要是思路,如果对你有所帮助,帮忙点个赞吧   ?

个人博客:云随笔

可以关注下博主的公众号,实时推送解决方案!

公众号