当前位置: 首页 > article >正文

【SpringBoot实现xss防御】

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 {

    @Override
    public 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);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void destroy() {}
}

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


http://www.kler.cn/a/516544.html

相关文章:

  • GS论文阅读--Hard Gaussian Splatting
  • 仅仅4M!windows系统适用,免费无限制使用!
  • Cesium特效——城市白模的科技动效的各种效果
  • 禁止 iOS 系统浏览器双指放大页面
  • 计算机组成原理——数据表示(二)
  • 论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion
  • 期权帮|在股指期货中超过持仓限额怎么办?
  • 【Redis】持久化机制
  • 【JVM】垃圾收集器详解
  • 解决CentOS9系统下Zabbix 7.2图形中文字符乱码问题
  • 4_高并发内存池项目_高并发池内存释放设计_ThreadCache/CentralCache/PageCache回收并释放内存
  • 人工智能技术在低空经济产业的应用
  • MyBatis-Plus之BaseMapper
  • 关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用
  • 设计模式Python版 简单工厂模式
  • OpenEuler学习笔记(十):用OpenEuler搭建web服务器
  • 【MCU】DFU、IAP、OTA
  • cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】
  • Mac 查看 Java SDK 和 Android SDK 的路径
  • 输入网址到网页显示,发生了什么--讲述
  • linux静态库+嵌套makefile
  • 【深度学习】 自动微分
  • python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算
  • Caesar
  • 【java】IP来源提取国家地址
  • PHP校园助手系统小程序