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

发表于:2019-9-09 09:29  作者:小可乐程序员   来源:今日头条

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 安全漏洞 微信公众号

  昨日在公众号中挖掘到了一个 XSS 安全漏洞,具体复现流程如下:
  发一篇公众号文章,标题中包含 <input onfocus="alert('1')">
  用户打开文章后,在写留言页面中会发现标题没有被转义,正常被渲染成了 HTML
  用户点击被渲染出来的输入框后执行代码
  以下是复现漏洞的视频
  视频链接
  如果视频又打不开了,可以去我公众号的文章里看。
  现在我们来分析下这个漏洞的产生过程。
  首先标题中存在 HTML <input onfocus="alert('1')">,在网页中如果不对这部分文本做转义的话,就会正常渲染为 HTML。
  在文章详情中其实我们并没有发现这个问题,也就说明了在该页面中开发者是做了文本转义的。
  但是在留言页面中却出现了该问题,也就是说开发者并没有做标题的转义,因此导致了这个问题的发生。
  虽然这个问题触发条件不是那么容易,但是对于微信这样亿级日活的产品出现这样低级的安全问题实属没想到。
  我们把这样的安全问题称之为 XSS 攻击。根据攻击的来源,我们可以将此类攻击分为三种,分别为:
  反射型
  存储型
  DOM 型
  在这个案例中我们遇到的是存储型 XSS 攻击。此类攻击是攻击者将恶意代码提交至服务器并保存在数据库中,用户访问该页面触发攻击行为。这种类型的攻击常见于保存用户编辑数据的场景下,比如案例中的发表文章,亦或者评论场景等等。
  防范存储型 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 标签不会被转义,但是 script 能被正常转义。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

【大佬说】测试员跳槽时,如何高效地准备面试?

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2019, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道