jQuery版本安全漏洞问题

by CNLYON at 2021-05-14

问题:

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 属性值;