博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XSS过滤器的实现
阅读量:6225 次
发布时间:2019-06-21

本文共 3226 字,大约阅读时间需要 10 分钟。

一、XSS是什么

  全称跨站脚本(cross site script)XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

比如在input框中填写了可以执行的javascript脚本,而后台并没有做过滤与校验。

二、过滤器是什么

  过滤器,顾名思义过滤某种物质的设备,在Java中用Filter接口来表示,实现该接口可对请求request来进行过滤,获取我们想要获取的数据,比如过滤XSS,低俗文字等。

三、过滤器与拦截器的区别

  • 过滤器依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,当请求匹配过滤规则时,即可被调用。
  • 拦截器依赖于web框架。在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。

四、XSS过滤器实现原理

  重写request的包装类HttpServletRequestWrapper中的get方法,过滤特殊的,危险的字符。

五、代码实现

5.1、web.xml

XssFilter
com.geenk.market.web.fliter.XssFilter
XssFilter
/*
REQUEST

5.2、XssFilter

package com.geenk.market.web.fliter;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import java.io.IOException;/** * filter过滤器-过滤BaseController中的getStr方法中的特殊字符 * Created by DUCHONG on 2017/4/13. */public class XssFilter implements Filter {    FilterConfig filterConfig = 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 {        chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);    }}

5.3、XssHttpServletRequestWrapper

package com.geenk.market.web.fliter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;/** * Created by DUCHONG on 2017/4/13. */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 < count; i++) {            encodedValues[i] = cleanXSS(values[i]);        }        return encodedValues;    }    public String getParameter(String parameter) {        String value = super.getParameter(parameter);        if (value == null) {            return null;        }        return cleanXSS(value);    }    public String getHeader(String name) {        String value = super.getHeader(name);        if (value == null)            return null;        return cleanXSS(value);    }    private String cleanXSS(String value) {        //You'll need to remove the spaces from the html entities below        value = value.replaceAll("\\<", "& lt;").replaceAll("\\>", "& 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;    }}

  

转载于:https://www.cnblogs.com/geekdc/p/8594854.html

你可能感兴趣的文章
【资料整理】lrzsz的使用
查看>>
WP的SEO工具汇总
查看>>
python基础教程函数参数
查看>>
2.23——2.25find命令(上中下);2.26 文件名后缀
查看>>
赵班长讲的运维体系
查看>>
haproxy环境
查看>>
redis 持久化 AOF RDB
查看>>
Java笔记6:循环
查看>>
Arm推出全新的Mali多媒体套件 感受完美视觉体验
查看>>
AngularJS实现产品列表(页面搜索,排序)
查看>>
Python3 urllib.parse 常用函数示例
查看>>
Oracle 等待事件之 db file scattered read
查看>>
git命令总结
查看>>
三大运营商集体表态:确保资产交接任务按时完成
查看>>
bootstrap的样式
查看>>
教你使用dsadd命令一键批量创建OU和用户(包含基础属性信息)
查看>>
第一篇 Python入门(day 1)
查看>>
webpack指南-webpack入门-开始使用webpack
查看>>
列表学习笔记1⃣
查看>>
mysql表、视图、索引(创建、修改、删除)相关示例
查看>>