jQuery版本安全漏洞问题
问题:
1、使用jQuery.append()、jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它。
2、版本低于1.7的jQuery过滤用户输入数据所使用的正则表达式存在缺陷,可能导致LOCATION.HASH跨站漏洞。
描述
hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)。
例如http://localhost/#part1
示例
代码:
<code>
<html>
<head>
<title>JQuery-xss-test</title>
<script src="https://code.jquery.com/jquery-1.6.1.min.js"></script>
<script>
$(function(){
try { $(location.hash) } catch(e) {}
})
</script>
</head>
<body>
Jquery xss test.
</body>
</html>
</code>
访问地址:
http://localhost/#<img src=/ onerror=alert(/F4ckTeam/)>
解决方法:
一升级库
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
二曲线救:
隐藏jQuery版本信息,避免被攻击者识别出版本号。
操作如下:
--jquery文件重命名;
--jquery文件里头部带有版本号的注释删除;
--jquery文件内版本号清除;PS:最终jquery文件内重写jquery版本而不是清除版本。
--在 jquery.js 文件中重写$.fn.jquery 属性值;