开源项目——实现XSS过滤Cookie过滤拦截器(二)

本文介绍了如何在SpringBoot项目中实现XSS过滤器,保护Cookie安全,通过创建FilterCoreUtil工具类、XssFilter拦截器和CookieFilter,确保接口请求的安全性。使用Lombok简化代码并配合Gradle进行依赖管理。

开源项目——实现XSS过滤Cookie过滤拦截器(二)

背景

日常我们开发人员在开发一些常用的平台时都会用到各种各样的接口,而对于这些接口的有效管理都会成为我们的一些麻烦事,一些常见的接口管理平台我们使用起来又不是很顺手,因此我想进行编写一个自己的API接口平台,用于我们日常的一些接口快速开发和管理共享使用。
里面会涉及到各类开发的知识,每项知识我们都会进行同步发布相应的学习记录文章,以便于想要学习某类知识的小伙伴能一起来成长。
该项目将每周进行更新2-4篇,该类别下同类延伸出来的文章均会以知识共享——XXXX命名。欢迎大家在我的主页下进行搜索阅读。

简介

本节为API管理平台增加基础功能-防XSS攻击-Cookie过滤,该功能主要为了确保我们接受到的请求具有一定的安全性,因此作为基础功能,我们优先纳入进来

参见文章

之前编写的技术学习文档系列之七、在拦截器中进行XSS与SQL注入拦截

开发环境

  • 系统:windows10
  • JDK:openjdk11
  • 开发工具:IDEA 教育版
  • 框架:SpringBoot
  • 包管理:Gradle
    后续涉及技术逐渐补充。

内容

本次涉及代码如图所示

image.png

1、在build.gradle中加入我们需要使用的软件包

implementation 'org.springframework.boot:spring-boot-starter-aop'
// https://mvnrepository.com/artifact/org.projectlombok/lombok
    implementation 'org.projectlombok:lombok:1.18.20'

    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    implementation 'org.apache.commons:commons-lang3:3.12.0'
    // https://mvnrepository.com/artifact/org.jsoup/jsoup
    implementation 'org.jsoup:jsoup:1.14.2'

2、创建我们需要使用到的工具类

package com.cnhuashao.apimanagement.base.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Safelist;
import org.jsoup.safety.Whitelist;

/**
 * 类 {@code FilterCoreUtil} 用于Xss非法标签过滤工具类 <br> 过滤html中的xss字符.
 *
 * 本软件仅对本次教程负责,版权所有 <a href="http://www.CN華少.com">中国,華少</a><br>
 *
 * @author CN華少
 * <a href="mailto:lz2392504@gmail.com
 * <p>
 * ">CN華少</a>
 */
@Slf4j
public class FilterCoreUtil {

    /**
     * 使用自带的basicWithImages 白名单
     * 允许的便签有a,b,blockquote,br,cite,code,dd,dl,dt,em,i,li,ol,p,pre,q,small,span,
     * strike,strong,sub,sup,u,ul,img
     * 以及a标签的href,img标签的src,align,alt,height,width,title属性
     */
    private static final Safelist WHITE_LIST = Safelist.basicWithImages();
    /** 配置过滤化参数,不对代码进行格式化 */
    private static final Document.OutputSettings OUTPUT_SETTINGS = new Document.OutputSettings().prettyPrint(false);
    static {
        // 富文本编辑时一些样式是使用style来进行实现的
        // 比如红色字体 style="color:red;"
        // 所以需要给所有标签添加style属性
        WHITE_LIST.addAttributes(":all", "style");
    }

    /**
     * 过滤主方法入口
     * @param content 需要过滤的字符串
     * @return 过滤后的字符串
     */
    public static String clean(String content) {
        if(StringUtils.isNotBlank(content)){
            content = content.trim();
        }
        return Jsoup.clean(content, "", WHITE_LIST, OUTPUT_SETTINGS);
    }
}

3、创建我们需要使用的拦截器

package com.cnhuashao.apimanagement.base.filter;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.uti
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN華少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值