我们一个项目的后台运营页面一直使用的easyui来开发,今天测试给提了一个bug,说存在html标签注入和js注入的问题,看了一下,问题的确存在,如图

这种情况下,输入的带标签文本,类似<span style='color:red'> xx </span>,<script>alert(0)</script>,都会被浏览器渲染和执行。
那么问题如何解决?经过一番尝试后,发现通过对easyui源码的一个小修改即可解决这个问题。
如图,在jquery.easyui.min.js中通过搜索 if(col.formatter){ 这段代码,找到对应位置:

可以看到在列渲染器不存在时,列的值直接被放入了最后要渲染的html字符串数组中,那么我们可以在放入之前,将标签的尖括号作转义处理,代码修改如下:
if(col.formatter){
cc.push(col.formatter(_7cf,_7cc,_7cb));
}else{
if(typeof(_7cf)=="string") {
cc.push(_7cf.replace(/</ig,'<').replace(/>/ig,'>'));
}else{
cc.push(_7cf);
}
}
修改完毕,清缓存重新访问,问题得到解决:

网友评论