起因: 公司一次常规安全扫描提出了jquery版本漏洞问题: 1.x系列版本等于或低于1.12的jQuery,和2.x系列版本等于或低于2.2的jQuery,过滤用户输入数据所使用的正则表达式存在缺陷,可能导
起因:
公司一次常规安全扫描提出了jquery版本漏洞问题:
1.x系列版本等于或低于1.12的jQuery,和2.x系列版本等于或低于2.2的jQuery,过滤用户输入数据所使用的正则表达式存在缺陷,可能导致LOCATION.HASH跨站漏洞。(漏洞官方修复介绍:http://bugs.jquery.com/ticket/9521)
正确解决方法:升级版本。
但是,最新版本的jquery废除了很多api,jQuery团队推出了的一个插件jQuery Migrate,自动恢复那些在最新版本之后被废弃的API,从而让已有的js代码无须改动就能和最新的jQuery库一起正常运行。在引用的jquery文件后引用Migrate文件即可。
<script src="http://img.558idc.com/uploadfile/allimg/210615/1R15924V-0.jpg"></script> <script src="http://img.558idc.com/uploadfile/allimg/210615/1R159A60-1.jpg"></script>
然而由于这个项目历史久远,代码功能繁杂,接手时排查发现引用了多个版本的jquery。仓促的、大规模的改动之后还是出现了很多问题,只能再回退版本,采取临时解决方案。
临时解决方案:隐藏jQuery版本信息,避免被攻击者识别出版本号。
操作如下:
>jquery文件重命名;
>jquery文件里头部带有版本号的注释删除;
>jquery文件内版本号清除;
>在 jquery.js 文件中重写$.fn.jquery 属性值;
然后项目就走常规上线流程了。
but,林子大了什么都有,版本插件多了什么幺蛾子都能冲突,还是有少部分功能页面内调用的jquery插件在没有任何报错的情况下失效了。
经过一系列排查,发现jquery文件内,保留版本号的情况下,那些奇怪的问题就消失了。
所以,最终jquery文件内重写jquery版本而不是清除版本。