解决跨站脚本执行漏洞

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接。 https://blog.csdn.net/axing2015/article/details/89152166

控制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里面有很多工具方法,有兴趣的可以研究一下。

猜你喜欢

转载自blog.csdn.net/axing2015/article/details/89152166
今日推荐