解决跨站脚本执行漏洞

1 篇文章 0 订阅

控制java后端返回前端<script>callback(alert("a"))</script>是否弹出提示框

今天收到安全部门反馈的一个问题,现象是这样的:

通过文件导入名单,并回显到前台输入框,再回显之后,浏览器会弹出一个alert提示框。
文件内容是:abc’);alert(/cbd/);//
回显到输入框:abc
弹出框是:cbd

jsp前端代码

<s:form method="post" action="http://localhost:8800/cms/name.do" enctype="multipart/form-data">
	<s:file name="file" theme="simple"/>
    <input type="submit" value="提交"/>
</s:form>
<input type="text" id="memberId"/>
<script>
    function callback(param){
        document.getElementById("memberId").value = param;
    }
</script>

java后端代码

private File file;

BufferedReader br = new BufferedReader(new ImputStreamReader(new FileImputStream(file),"UTF-8"));
...省略一些读取文件内容代码
String msg = br.readLine();

// 获取 javax.servlet.http.HttpServletResponse 不做多的介绍
// 设置 header、encoding、contentType
response.setHeader("Charset", "UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
// 获取 PrintWriter
PrintWriter writer = reponse.getWriter();
// 直接写到前端
writer.writr(<script>callback(msg)</script>);
writer.close();

通过上面的代码可知问题是出在上传文件中包含了alert(/cbd/);内容,在后端读取之后,直接返回到了前端,前端则直接执行了alert弹出了提示框。

解决该问题需要通过org.apache.commons.lang.StringEscapeUtils.escapeJavaScript(msg)工具对读取文件内容进行转义,这样到前台只会当成字符串输出。

StringEscapeUtils里面有很多工具方法,有兴趣的可以研究一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值