Cross-Site Scripting: Persistent XSS 漏洞修复笔记

最近,项目工程进行 代码安全扫描 的过程中产生了一个 XSS 相关的bug,在此记录解决办法,和大家分享。

一.问题描述

漏洞扫描过程中报下面缺陷信息,大致意思是说 由于页面在接收参数的过程中,没有进行参数的校验,可能存在 参数中存在可执行代码的漏洞。

Cross-Site Scripting: Persistent Critical
Package: /WEB-INF/views/xx
xx-web/webapp/WEB-INF/views/xxxt.jsp, line 36 (Cross-Site
Scripting: Persistent) Critical
57 @Override
Sink Details
Sink: javax.servlet.jsp.JspWriter.print()
Enclosing Method: _jspService()
File: xx-web/webapp/WEB-INF/views/xx.jsp:36
Taint Flags: DATABASE, XSS

33  <form id="policy_save" method="POST">
34  <table class="edit-table mg-t-1">
35  <input type="hidden" id="zcLsh" name="zcLsh" value="${zfzc.zcLsh}">
36  <input type="hidden" name="zcbjLsh" value="${zfzc.zcbjLsh}">
37  <input type="hidden" name="createTime" value="${zfzc.createTime}">
38  <input type="hidden" name="createUser" value="${zfzc.createUser}">
39  <input type="hidden" name="functionName" value="2"/>

二.产生原因

这里引用参考的一篇文章:如何防止XSS攻击?

三.解决办法

解决该问题的办法,就是要将页面上接收的后台参数进行转义处理,避免我们的参数中出现 “特殊字符”。这里经过资料搜集及实践,我们采用开源框架 OWASP Java Encoder Project,这个开源框架主要就是进行 HTML 页面或 web 项目中 特殊字符的 转义处理。
OWASP Java Encoder Project
主页地址:https://www.owasp.org/index.php/OWASP_Java_Encoder_Project
githib地址:https://github.com/OWASP/owasp-java-encoder

1.先要在web工程中引入 pom 依赖

<dependency>
    <groupId>org.owasp.encoder</groupId>
    <artifactId>encoder</artifactId>
    <version>1.2.2</version>
</dependency>

<dependency>
    <groupId>org.owasp.encoder</groupId>
    <artifactId>encoder-jsp</artifactId>
    <version>1.2.2</version>
</dependency>

2.在 jsp 页面中,调用相应的转义方法

例如,文章开头中出现 bug 提示的内容:
在这里插入图片描述

我们引入以下标签库 ,并使用方法e.forHtml(),将 EL 表达式中的参数进行过滤

<!-- 解决XSS漏洞,引入下面lib -->
<%@taglib prefix="e" uri="https://www.owasp.org/index.php/OWASP_Java_Encoder_Project" %>
...
<input type="hidden" id="zcLsh" name="zcLsh" value="${e:forHtml(mc.zcLsh)}">
<input type="hidden" name="zcbjLsh" value="${e:forHtml(mc.zcbjLsh)}">
<input type="hidden" name="createTime" value="${e:forHtml(mc.createTime)}">
<input type="hidden" name="createUser" value="${e:forHtml(mc.createUser)}">
<input type="hidden" name="functionName" value="2"/>
<input type="hidden" name="relationId" id="relationId" value=""/>

再次扫描时,该 bug 未重现。
有关该问题的更多使用,大家可以参考文中的项目地址,有问题我们可以留言交流。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值