You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot请求体清洗方案:含特殊值的属性处理方法

Spring Boot 请求体特殊值清洗方案

问题背景

在Spring Boot中处理请求体时,常会遇到包含XSS、SQL注入风险的特殊值,比如:

<script>alert(1709881302027)</scipt>;;
<script /**/>/**/alert(1709881242160)/**/</script /**/>
<IMG onmouseover="alert('xxs')">
&gt;&lt;script&gt;alert(1709881242161)&lt;/script&gt;
%3Cscript%3Ealert%281%29%3C%2Fscript%3E1709881242161
javascript:alert(1709881302029)
1 OR 1=1 ; -- OR 1 OR 1=1 ;
' OR '1'='1
1 OR 1=1;

常规OWASP库会无差别转义<、'等字符,但像>50000或<232这类和数值搭配的符号不需要转义,需要更精细化的处理方案。

可行解决方案

1. 自定义规则结合OWASP库

利用OWASP ESAPI的编码能力,同时通过正则匹配跳过数值比较场景的符号:

  • 编写正则匹配^\d+[<>]\d+$或^[<>]\d+$、^\d+[<>]$这类数值相关模式,识别无需转义的</>;
  • 匹配到的内容直接保留,其余内容用OWASP的ESAPI.encoder().encodeForHTML()等方法编码。

示例代码片段:

import org.owasp.esapi.ESAPI;

public class RequestCleaner {
    private static final String NUM_COMPARE_PATTERN = "^([<>]\\d+|\\d+[<>]|\\d+[<>]\\d+)$";

    public String cleanField(String value) {
        if (value == null) return null;
        // 匹配数值比较场景,直接返回原内容
        if (value.matches(NUM_COMPARE_PATTERN)) {
            return value;
        }
        // 其他场景用OWASP编码
        return ESAPI.encoder().encodeForHTML(value);
    }
}

2. 按字段场景分治+白名单策略

根据字段业务用途针对性处理:

  • 文本展示字段:用OWASP的HTML编码过滤XSS风险代码,比如移除<script>标签、on*事件属性、javascript:伪协议;
  • 数值相关字段:设置白名单,只允许数字、<、>、=等合法符号,过滤'、OR、--等SQL注入相关内容。

示例:数值字段的白名单过滤

public String cleanNumberField(String value) {
    if (value == null) return null;
    // 只保留数字、<、>、=、空格
    return value.replaceAll("[^0-9<>= ]", "");
}

3. 专项攻击类型处理

  • XSS防御:用正则匹配并移除/编码恶意代码:
    public String stripXss(String value) {
        if (value == null) return null;
        // 移除含注释混淆的script标签
        value = value.replaceAll("<script[^>]*?>.*?</script>", "");
        // 移除on事件属性
        value = value.replaceAll("on\\w+\\s*=\\s*[\"]?[^\"\"]*[\"]?", "");
        // 移除javascript:伪协议
        value = value.replaceAll("javascript:\\s*", "");
        // 对剩余HTML特殊字符编码
        return ESAPI.encoder().encodeForHTML(value);
    }
    
  • SQL注入防御:优先使用MyBatis参数绑定(#{})避免注入;若必须拼接SQL,用OWASP的encodeForSQL()处理参数,或直接过滤OR、--、UNION等SQL关键字。

注意事项

  • 不要依赖单一清洗方案,结合输入验证+输出编码双重保障;
  • 定期更新OWASP库版本,规避已知漏洞;
  • 复杂业务场景可自定义注解+AOP实现全局请求体清洗,减少重复代码。

内容的提问来源于stack exchange,提问作者Divya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:15