【SpringBoot实现xss防御】

devtools/2025/1/23 7:08:55/

xss_0">SpringBoot实现xss防御

在Spring Boot中实现XSS防御,可以通过多种方式来确保输入的安全性和防止恶意脚本的注入。下面提供了一些具体的实现代码示例,包括输入清理、输出编码以及设置安全响应头。

1. 输入清理

创建一个简单的工具类来进行HTML转义:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document.OutputSettings;
import org.jsoup.safety.Cleaner;
import org.jsoup.safety.Whitelist;public class XssUtil {private static final Whitelist USER_CONTENT = Whitelist.none().addTags("a", "p", "img") // 允许的标签.addAttributes("a", "href", "title").addAttributes("img", "src", "alt");public static String cleanXSS(String value) {Cleaner cleaner = new Cleaner(USER_CONTENT);OutputSettings outputSettings = new OutputSettings();outputSettings.prettyPrint(false); // 禁止格式化输出return Jsoup.clean(cleaner.clean(Jsoup.parseBodyFragment(value)).html(), outputSettings);}
}

在接收用户输入的地方使用这个工具类进行清理:

@PostMapping("/submit")
public ResponseEntity<?> submitForm(@RequestParam String userInput) {String sanitizedInput = XssUtil.cleanXSS(userInput);// 继续处理sanitizedInput...return ResponseEntity.ok().build();
}

2. 输出编码

如果你使用的是Thymeleaf模板引擎,默认情况下会自动对模型属性进行HTML转义。如果需要手动进行转义,可以这样做:

<p th:text="${text}">default text</p>

这里th:text指令会自动将${text}变量中的特殊字符转义为HTML实体。

对于其他模板引擎或直接返回字符串到前端的情况,可以使用Spring提供的HtmlUtils.htmlEscape()方法:

import org.springframework.web.util.HtmlUtils;@ResponseBody
@GetMapping("/unsafe")
public String unsafe() {String input = "<script>alert('xss');</script>";return HtmlUtils.htmlEscape(input);
}

3. 设置安全响应头

可以通过添加一个过滤器来设置HTTP响应头,如Content Security Policy和X-XSS-Protection:

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class SecurityHeaderFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletResponse httpResponse = (HttpServletResponse) response;httpResponse.setHeader("Content-Security-Policy", "script-src 'self'");httpResponse.setHeader("X-XSS-Protection", "1; mode=block");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}

以上就是一些在Spring Boot中防御XSS攻击的具体实现代码示例。根据项目的具体情况,你可能还需要调整这些策略,比如更严格的白名单设置或额外的安全措施。


http://www.ppmy.cn/devtools/152815.html

相关文章

VirtualBox can‘t enable the AMD-V extension

个人博客地址&#xff1a;VirtualBox cant enable the AMD-V extension | 一张假钞的真实世界 最近一次完成Deepin的系统更新后&#xff0c;进入VirtualBox创建的虚拟机&#xff08;Widows10&#xff09;时&#xff0c;出现以下错误&#xff1a; 根据网址“https://askubuntu.…

Labview替代平台ATECLOUD的兼容性如何?

Labview替代平台ATECLOUD的兼容性十分灵活便捷&#xff0c;平台中现已兼容了超过300品牌型号的仪器。 仪器兼容种类多 标准仪器&#xff1a;可兼容示波器、万用表、矢量网络分析仪等 300多种常见品牌型号标准仪器。 非标设备&#xff1a;能够与探针台、万用表切换工装等非标…

闭包,变量和函数提升,函数参数,展开运算符,箭头函数

闭包&#xff1a; 内层函数加上外层变量&#xff0c;下边的闭包也就是 fn函数加上 fn函数中运用到的外层变量 a scope&#xff1a;作用域 现在可以看到如果内层函数没有使用到外部变量&#xff0c;那么就不会产生闭包 闭包作用&#xff1a;封闭数据&#xff0c;提供操作 闭包常…

async++库的使用示例

1、普通异步函数 如前面的博客介绍的&#xff0c;这个库中提供了async::spawn方法&#xff0c;这个方法通常用来启动异步函数&#xff0c;这个框架会利用线程池去完成函数&#xff0c;因此要注意数据安全。正因为将任务放到了单独的线程执行&#xff0c;并且还有调度开销&…

HBased的原理

一、什么是HBase HBase是一个分布式&#xff0c;版本化&#xff0c;面向列的数据库&#xff0c;依赖Hadoop和Zookeeper &#xff08;1&#xff09;HBase的优点 提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统 (2) HBase 表的特性 Region包含多行 列族包含多…

PPT技巧:如何使用快速访问工具栏

1、效果展示 2、设置方法 3、最重要的设置

用于牙科的多任务视频增强

Multi-task Video Enhancement for Dental Interventions 2022 miccai Abstract 微型照相机牢牢地固定在牙科手机上&#xff0c;这样牙医就可以持续地监测保守牙科手术的进展情况。但视频辅助牙科干预中的视频增强减轻了低光、噪音、模糊和相机握手等降低视觉舒适度的问题。…

MySQL入门(数据库、数据表、数据、字段的操作以及查询相关sql语法)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…