微信公众号爆出前端xss安全漏洞
微信发现XSS安全漏洞公众号前端崩溃('1')">当用户打开文章时,会发现消息页面标题没有转义,正常渲染为HTML 用户点击渲染的输入框,执行代码
以下是漏洞复现视频
视频链接
现在我们来分析一下这个漏洞的产生过程。
首先, title 包含 HTML 。如果这部分文本在网页上没有转义,则会正常渲染为 HTML。
实际上,我们在文章详情中没有发现这个问题,这说明开发者在转义这个页面上有一些文字。
但是这个问题出现在消息页面上,这意味着开发者无法转义导致这个问题的地址
虽然触发该问题的条件并不那么简单,但在微信这样日活跃用户数亿的产品中出现如此低安全级别的问题,着实令人始料未及。
此类安全问题称为XSS攻击。根据攻击来源的不同,此类攻击可分为三种类型,分别是:
- 反射型
- 存储型
- DOM 型
本例中我们遇到的是存储型 XSS 攻击。在此类攻击中,攻击者将恶意代码传递到服务器并存储在数据库中,用户访问该页面即可发起攻击。此类攻击常见于存储用户编辑数据的场景,例如发布的案例文章或评论场景等。例如用户评论、发表的文章等。所有这些信息都必须有转义字符串,主要是引号、尖括号和反斜杠
function escape(str) {
str = str.replace(/&/g, '&')
str = str.replace(/</g, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(/\//g, '/')
return str
}
// "<script>alert(1)</script>"
escape('<script>alert(1)</script>')
复制代码但是,在显示富文本的场景下,不可能对所有内容进行转义,因为这也会过滤所需的格式。失去。在这种情况下,通常会考虑白名单过滤。
// 使用 js-xss 开源项目
const xss = require('xss')
let html = xss('<h1 id="title">XSS</h1><script>alert("xss");</script>')
// -> <h1>XSS</h1><script>alert("xss");</script>
console.log(html)
复制代码在白名单的情况下,标签h1不会转义,脚本可以正常转义。
最后
安全不是小事。在进行项目时,每个人都应该始终意识到类似场景中可能出现的潜在安全问题。
作者:yck
链接:https://juejin.im/post/5d6f1e68f265da03d871dc08
来源:掘金
版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
