如何修复JSP页面中Checkmarx检测出的反射型XSS攻击?
解决JSP中${pageContext.request.contextPath}引发的反射型XSS告警问题
先修正你代码里的拼写错误:${pageContext.reqest.contextPath}里的reqest是笔误,应该写成request,这个错误可能会导致脚本路径加载失败。
接下来解决Checkmarx的XSS告警以及你用<c:url>未生效的问题:
方案1:正确使用<c:url>标签
你之前的写法多余手动拼接了contextPath,<c:url>标签本身会自动获取当前应用的contextPath,不需要额外拼接。直接这么写即可:
<script type="text/javascript" src="<c:url value="/js/viewone.js" />"></script>
该标签会自动生成带contextPath的完整路径,同时对URL进行安全编码,能有效规避XSS风险,消除Checkmarx的告警。
方案2:用JSTL函数转义contextPath(若方案1仍触发告警)
如果安全扫描仍有告警,可使用JSTL的fn:escapeXml函数对contextPath做XML转义,确保输出内容不会被解析为恶意脚本。
首先引入JSTL函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
之后修改script标签:
<script type="text/javascript" src="${fn:escapeXml(pageContext.request.contextPath)}/js/viewone.js"></script>
补充说明
pageContext.request.contextPath是服务器配置的应用路径,不属于用户可控输入,理论上不存在XSS风险,Checkmarx大概率是误报。但通过上述两种方法,既能满足安全扫描要求,也能保证代码的正确性。
内容的提问来源于stack exchange,提问作者ankur pramanik
相关产品推荐
相关产品推荐

