getPath
内部方法潜在的 XSS 安全漏洞修复说明发布:2024-09-25
近期,热心开发者 @jackfromeast 在 Github 社区向 Layui 提交了一个 DOM Clobbering 安全漏洞报告,该漏洞通过 gadgets 可能导致跨站脚本(XSS)攻击。值得注意的是,我们在其他流行工具如 Rollup, Vite, Webpack 等也发现了类似的问题。
Layui 构建版(即用于生成环境的发行版本)和开发版均存在不同程度的影响,构建版的影响相对较轻。
该漏洞已在 Layui 2.9.17 版本中修复,且已按照 GitHub Security Advisories 流程发布了对应的安全公告。
Affected versions | Patched versions |
---|---|
< 2.9.17 | 2.9.17 |
若您当前使用的版本 >= 2.8.0
,可直接覆盖升级到 2.9.17+
版本完成修复。
以下主要针对 < 2.8.0
的低版本「非覆盖升级」的修复方式进行介绍:
layui.js
文件,在代码开头部分找到:h.currentScript?
h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()?
注:由于构建工具的随机性,部分版本的代码开头部分可能有细微不同,建议核心查找:.currentScript?
假如其前面的字母是 t
,如:
t.currentScript?
则应替换为:
t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()?
如果引入的是开发版的 layui.js(即 src/layui.js
),则直接找到 getPath
方法的 jsPath
变量,将以下代码:
doc.currentScript ?
替换为:
(doc.currentScript && doc.currentScript.tagName.toUpperCase() === 'SCRIPT') ?