随着互联网的发达,各种 Web 端的应用功能越来越多,架构设计也变得越来越复杂。为了抢占流量,所以应用会满足使用者各种各样的需求。但是随着应用功能越来越多的同时,随之而来的就是各种网络安全的问题。如何保护自家产品不被黑客攻击?用户信息不被黑客获取?作为前端开发行业的我们也逃不开这个问题。所以今天我们就简单聊一聊 Web 前端安全以及如何防范。
“安全”是个很大的话题,各种安全问题的类型也是种类繁多。如果我们把安全问题按照所发生的区域来进行分类的话,那么所有发生在后端服务器、应用、服务当中的安全问题就是“后端安全问题”,所有发生在浏览器、单页面应用、Web 页面当中的安全问题则算是“前端安全问题”。当我们下面在谈论“前端安全问题”的时候,我们说的是发生在浏览器、前端应用当中,或者通常由前端开发工程师来对其进行修复的安全问题。
国内很多互联网公司都有自己的安全团队,特别是像腾讯这样的大厂来说,每天面对以亿计算的用户数据,更需要一个强大而精密的技术团队来保证自家的应用安全、稳定的运行。腾讯有一支专门对抗黑产的神秘队伍,叫“腾讯防水墙”。为什么叫“防水墙”?因为这样一听,就知道和“防火墙”是两兄弟啊,而且他们打的就是各种流量水军。
拿腾讯防水墙的日常来看,这支神秘队伍每天在 5000+ 企业和业务上和黑产分子过招,日均常规风险判断 500 亿 + 次,识别风险占比高达 30%,平均每 10 次请求就有 3 次为风险请求。现在,腾讯防水墙不但在保护腾讯 3000 多个业务,还为京东 618、双 11 大促保驾护航;为永辉、蒙牛、快手、B 站等提供注册和营销保护。
在今年的 GMTC 全球大前端技术大会上,我们邀请到了腾讯防水墙团队的前端负责人刘忠正老师,来谈谈从代码保护的角度出发,业务安全前端对抗应该如何进行。下面是 InfoQ 对于刘老师做的一个简单的采访:
首先感谢 GMTC 组委会愿意引入前端安全领域相关的话题,让我有机会给大家分享业务安全前端相关的内容。我是 2015 年毕业的,毕业后效力于阿里巴巴安全部,而后从阿里离职去 51 信用卡管家做过一段时间的前端架构,2017 年加入腾讯,在腾讯防水墙团队负责业务安全的前端。研究如何保护前端数据,增加前端代码逆向的难度,以及对恶意的执行环境进行检测,最终形成一个立体化的业务安全防御体系。
防水墙团队来自腾讯 TEG 安全平台部,团队积累了十余年的业务安全数据和风控经验,在金融、营销、帐号、内容等场景为腾讯各个业务提供业务安全基础能力,保障微信、QQ、腾讯视频、微众银行等产品的业务安全。
众所周知通用前端会面临诸如 XSS、CSRF 这样的安全风险,这种安全问题通常危害很大,需要研发同学有一些安全意识去防范。当然很多流程上的缺陷也会带来业务安全问题,但这不属于前端需要重点关注的领域。在业务安全前端领域,爬虫、脚本批量操作才是我们面临最大的问题,我们需要去识别当前操作是正常人还是机器行为。常规的方式是用图形验证码,也就是做图灵测试,但在机器学习盛行的大背景下,图形验证码简直不堪一击,现阶段主流的方案是通过收集用户行为和环境信息构建出多维模型对用户进行精准识别,具体到前端则是采集各种模型需要的数据,并通过加密、混淆、虚拟机等方式保护前端代码不被逆向或篡改。
首先需要给大家一个客观的认识,类似 Uglify 的代码压缩并不是很好的代码保护手段,因此普遍认为代码压缩不属于代码保护的一部分,代码压缩只是一种代码优化。前端代码保护大致有两个流派,一个是以语法树变换为基础的混淆保护,一个是以构建私有执行环境为思路的虚拟机保护,谷歌则属于后者。代码混淆的效果因混淆器的负责程度而不同,基础级别的混淆器混淆出来的代码也很容易被逆向,而虚拟机保护的抗逆向效果好,其原理是在 JavaScript 的执行环境之上再设计构建一个虚拟机,所有原有业务逻辑的 JavaScript 代码均转换为该虚拟机可识别的字节码,复杂度较高效果好。
前端安全确实是老生常谈的话题,其实很多时候出了问题再挽救往往就晚了,不管是敏感数据被盗还是代金券被薅,一旦薅完,损失就已经无法挽回,未雨绸缪非常重要。安全从业人员有个普遍的共识,就是不出安全问题往往很难去描述自己的工作价值,但出了问题安全人员肯定要背一部分锅,吃力不讨好。那么对于一般公司来说,我个人有两个方面的建议:
不断提升研发人员的安全意识
使用现代前端框架
并不是这么做就不会出问题,但出问题的概率会小一些,每个研发人员都多一点安全意识,很多漏洞就可以避免了。
我认为前端安全领域未来的趋势很有可能会是浏览器帮我们做越来越的事,最终安全问题均交给浏览器来解决。从历史趋势看,安全领域的门槛一定是越来越低的,对于从业人员是如此,对于攻击者也是如此。
传统前端安全现阶段已经慢慢形成了一些通用的防御方案,一方面,W3C 制定了 CSP 标准用于提供更通用的 XSS 防御手段,另一方面,现代前端框架 React 等天生就具备一定的防御 XSS 能力,通过标准 + 框架 + 意识的提升,传统前端安全问题将越来越少。
而业务安全前端解决的最根本问题是人与机器的问题,那么为何不能由浏览器提供一个统一的生物认证接口,让浏览器告诉站点操作者是人还是机器,比如指纹、FaceID,这类生物特征都是很难被伪造的,浏览器提供统一的接口进行认真,这对于恶意用户来说几乎是降维打击。
那么最终业务安全的问题可能就回归到流程的问题了,业务逻辑是否存在被绕过的漏洞,前端不再那么棘手。
通过刘老师的介绍,我们简单的了解了一下前端安全的重要性和它对于业务的意义,在 GMTC 全球大前端技术大会上刘老师将会带来《从代码保护出发详谈业务安全前端对抗》的详细技术演讲,下面是演讲提纲:
(1) 业务安全背景(2)恶意分类(3)图像对抗的脆弱性
(1)前端数据保护(2)前端代码保护(3)字面量混淆(4)流程混淆(5)调试检测
(1)Node.js 环境检测
(1)动态混淆技术
对于刘老师的演讲或者前端安全领域感兴趣的小伙伴欢迎来现场聆听详细的技术演讲细节。在 GMTC 全球大前端技术大会上我们还设置了小程序、性能优化、前端框架、Node、移动 AI、图形渲染、前端团队管理等热门技术专场,可点击”阅读原文“了解大会详情。购票咨询:18514549229(同微信)
1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“InfoQ”微信公众号,文章版权归InfoQ公众号所有。