Code前端首页关于Code前端联系我们

微信公众号爆出前端xss安全漏洞

terry 2年前 (2023-09-28) 阅读数 74 #Web安全
微信发现XSS安全漏洞公众号前端崩溃('1')">
  • 当用户打开文章时,会发现消息页面标题没有转义,正常渲染为HTML
  • 用户点击渲染的输入框,执行代码
  • 以下是漏洞复现视频

    视频链接

    现在我们来分析一下这个漏洞的产生过程。

    首先, title 包含 HTML 。如果这部分文本在网页上没有转义,则会正常渲染为 HTML。

    实际上,我们在文章详情中没有发现这个问题,这说明开发者在转义这个页面上有一些文字。

    但是这个问题出现在消息页面上,这意味着开发者无法转义导致这个问题的地址

    虽然触发该问题的条件并不那么简单,但在微信这样日活跃用户数亿的产品中出现如此低安全级别的问题,着实令人始料未及。

    此类安全问题称为XSS攻击。根据攻击来源的不同,此类攻击可分为三种类型,分别是:

    • 反射型
    • 存储型
    • DOM 型

    本例中我们遇到的是存储型 XSS 攻击。在此类攻击中,攻击者将恶意代码传递到服务器并存储在数据库中,用户访问该页面即可发起攻击。此类攻击常见于存储用户编辑数据的场景,例如发布的案例文章或评论场景等。例如用户评论、发表的文章等。所有这些信息都必须有转义字符串,主要是引号、尖括号和反斜杠

    function escape(str) {
      str = str.replace(/&/g, '&')
      str = str.replace(/</g, '&lt;')
      str = str.replace(/>/g, '&gt;')
      str = str.replace(/"/g, '&quto;')
      str = str.replace(/'/g, '&#39;')
      str = str.replace(/`/g, '&#96;')
      str = str.replace(/\//g, '&#x2F;')
      return str
    }
    // "&lt;script&gt;alert(1)&lt;&#x2F;script&gt;"
    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>&lt;script&gt;alert("xss");&lt;/script&gt;
    console.log(html)
    复制代码

    在白名单的情况下,标签h1不会转义,脚本可以正常转义。

    最后

    安全不是小事。在进行项目时,每个人都应该始终意识到类似场景中可能出现的潜在安全问题。

    作者:yck
    链接:https://juejin.im/post/5d6f1e68f265da03d871dc08
    来源:掘金
    版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。

    版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    热门