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

如何修复CAST检测出的DOM跨站脚本漏洞?求代码修改方案

解决DOM跨站脚本(XSS)漏洞的具体方案

首先,咱们得先搞明白为什么这段代码会触发XSS警报:你直接把未经过任何过滤的用户输入(sid参数)插入到HTML的value属性中,而且连属性值的双引号都没加——这就给恶意攻击者留下了可乘之机。如果有人构造一个包含脚本的sid参数(比如"><script>stealCookies()</script>),浏览器会把这段内容当作HTML/JS代码执行,直接造成DOM XSS漏洞。

核心解决思路

对用户输入进行HTML属性转义,把特殊字符转换成对应的HTML实体,让浏览器把这些内容当作普通文本而非可执行代码处理。下面给你两种可靠的修改方式:


方式一:使用JSTL的fn:escapeXml(推荐)

这是最简洁且经过测试的标准方案,前提是你的项目已经引入了JSTL标签库。

  1. 先在页面顶部引入JSTL函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  1. 修改原来的input代码行:
    原来的代码(注意缺少双引号,这本身就是风险):
<input type="hidden" name="sid" value=<%=request.getParameter("sid")%>>

修改后(加上双引号并转义):

<input type="hidden" name="sid" value="${fn:escapeXml(param.sid)}">

fn:escapeXml会自动把"、&、<、>等特殊字符转换成对应的HTML实体,彻底阻断脚本注入的可能。


方式二:手动实现HTML属性转义函数

如果你的项目没法用JSTL,可以自己写一个工具函数来处理转义:

  1. 在你的Java工具类(比如XssUtils.java)中添加转义方法:
public class XssUtils {
    public static String escapeHtmlAttribute(String input) {
        if (input == null) {
            return ""; // 处理null值,避免空指针
        }
        StringBuilder escaped = new StringBuilder();
        for (char c : input.toCharArray()) {
            switch (c) {
                case '"': escaped.append("&quot;"); break;
                case '&': escaped.append("&amp;"); break;
                case '<': escaped.append("&lt;"); break;
                case '>': escaped.append("&gt;"); break;
                case '\'': escaped.append("&#39;"); break;
                default: escaped.append(c); break;
            }
        }
        return escaped.toString();
    }
}
  1. 在JSP中调用这个工具函数:
<input type="hidden" name="sid" value="<%= XssUtils.escapeHtmlAttribute(request.getParameter("sid")) %>">

关键注意事项

  • 一定要给value属性加上双引号!没有引号的话,即使转义了也可能存在其他注入风险。
  • 不要只转义双引号,必须覆盖所有HTML属性中的特殊字符(&、<、>、'、"),否则还是会有漏洞。
  • 优先使用标准库(比如JSTL)而不是自己写的函数,因为标准库经过了更全面的测试,不容易遗漏边缘情况。

这样修改后,再用CAST工具检测应该就不会报XSS漏洞了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:00