防止Xss攻击

原理:通过过滤request请求的paramer进行处理。

1,编写xssFilter类,


public class XssFilter implements Filter {

    FilterConfig filterConfig = null;

    private List<String> urlExclusion = 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 {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        String servletPath = httpServletRequest.getServletPath();

        if (urlExclusion != null && urlExclusion.contains(servletPath)) {
            chain.doFilter(request, response);
        } else {
            chain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
        }
    }

    public List<String> getUrlExclusion() {
        return urlExclusion;
    }

    public void setUrlExclusion(List<String> urlExclusion) {
        this.urlExclusion = urlExclusion;
    }

2,通过XssHttpServletRequestWrapper过滤url

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;

    }


}

3,注入spring中

/**
     * xssFilter注册
     */
    @Bean
    public FilterRegistrationBean xssFilterRegistration() {
        XssFilter xssFilter = new XssFilter();
        // 这里可以加不被xss过滤的接口
        //xssFilter.setUrlExclusion(Arrays.asList("/merchants/*"));
        FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
        registration.addUrlPatterns("/*");  //这里的/*指拦截所有路径
        return registration;
    }

注:有参考guns开源框架的实现方案。感谢guns作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
具体详情 https://gitee.com/wuburen/guns #Guns V2.1 新版Guns基于SpringBoot全面升级,完美整合springmvc + shiro + mybatis-plus + beetl! 在不用写xml配置(V1.0)的基础上进一步简化项目配置,让您更专注于业务开发!抛弃传统spring xml的配置方式,利用springboot + javabean方式配置spring,极大简化了pom.xml配置和spring配置. Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模块(用户管理,角色管理,部门管理,字典管理等10个模块),可以直接作为一个后台管理系统的脚手架. 如果您不喜欢用SpringBoot,或者您是一个spring初学者,您可以切换到Guns V1.0(点击这里)分支, Guns V1.0基于spring的java bean方式配置项目,同样简洁易上手. 注:SpringBoot强大的Auto Config和统一的依赖管理极大的简化了spring配置和maven依赖,在不了解其都配置了哪些东西的基础上可能会对初学者有一定困扰,所以建议初学者先看Guns V1.0 ##功能 简介 用户管理 角色管理 部门管理 菜单管理 字典管理 业务日志 登录日志 监控管理 通知管理 代码生成 ##使用说明 导入sql/guns.sql文件到mysql数据库 以maven方式导入项目到ide 修改application.yml中的数据库相关的配置,改为您本机的数据库配置 启动项目,管理员账号admin/密码111111 ###如何启动项目 Guns目前支持三种启动方式: 在IDE里运行GunsApplication类中的main方法启动 执行如下maven命令 clean package -Dmaven.test.skip=true 并从target目录中找到guns-1.0.0-SNAPSHOT.jar,并在jar包的目录下执行如下java命令 java -jar guns-1.0.0-SNAPSHOT.jar 修改pom.xml中如下片段 <packaging>jar</packaging> 改为 <packaging>war</packaging> 并打包放入到tomcat中执行 ##所用框架 ###前端 Bootstrap v3.3.6 jQuery v2.1.4 bootstrap-table v1.9.0 layer v2.1 zTree core v3.5.28 WebUploader 0.1.5 ###后端 SpringBoot 1.5.3.RELEASE MyBatis-Plus 2.0.8 MyBatis 3.4.4 Spring 4.3.8.RELEASE Beetl 2.7.15 hibernate-validator 5.3.5.Final Ehcache 3.3.1 Kaptcha 2.3.2 Fastjson 1.2.31 Shiro 1.4.0 Druid 1.0.31 ##项目包结构说明 ├─main │ │ │ ├─java │ │ │ │ │ ├─com.stylefeng.guns----------------项目主代码 │ │ │ │ │ │ │ ├─common----------------项目公用的部分(业务中经常调用的类,例如常量,异常,实体,注解,分页类,节点类) │ │ │ │ │ │ │ ├─config----------------项目配置代码(例如mybtais-plus配置,ehcache配置等) │ │ │ │ │ │ │ ├─core----------------项目运行的核心依靠(例如aop日志记录,拦截器,监听器,guns模板引擎,shiro权限检查等) │ │ │ │ │ │ │ ├─modular----------------项目业务代码 │ │ │ │ │ │ │ ├─GunsApplication类----------------以main方法启动springboot的类 │ │ │ │ │ │ │ └─GunsServletInitializer类----------------用servlet容器启动springboot的核心类 │ │ │ │ │ └─generator----------------mybatis-plus Entity生成器 │ │ │ ├─resources----------------项目资源文件 │ │ │ │ │ ├─gunsTemplate----------------guns代码生成模板 │ │ │ │ │ ├─application.yml----------------springboot项目配置 │ │ │ │ │ ├─ehcache.xml----------------ehcache缓存配置 │ │ │ └─webapp----------------web页面和静态资源存放的目录 │ 注:SpringBoot项目默认不支持将静态资源和模板(web页面)放到webapp目录,但是个人感觉resources目录只放项目的配置更加简洁,所以就将web页面继续放到webapp目录了.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值