从测试和 QA 角度,如何看待 Ant Design 圣诞节彩蛋事件?

https://www.zhihu.com/question/306858501

这次事件虽然是彩蛋,但其实也促使测试和 QA 去思考一个很严重的挑战 —— 如果开发者在代码里“下毒”怎么办?

问题描述

无论是处于好心的彩蛋,还是恶意的留后门,或者是无意间留下的
bug,都会给人类埋下一枚巨大的地雷。这类问题其实在质量的历史上曾经出现过很多次,比如千年虫、int 类型溢出、MD5
碰撞等问题,基本上阿里、腾讯、百度、京东等大大小小的公司都经历过。这类 bug
的特征就是,在时间、环境、数据量变化的前提下会有一定概率发生错乱。与其说考验的是测试能力,还不如说考验的是开发者的架构能力。

先抛出几个类似的历史上有名的严重质量威胁给大家做个参考,因为一时找不到对应的新闻和源代码分析了,所以就简单记录下,后面再补充完善细节。

常见的类似问题

  • 千年虫问题(暴露年龄了。。。)

  • Linux 源代码后门提交问题,有不明身份的人伪装开发者提交一段暗藏后门的代码给 Linux,结果被发现。

  • Mac 后门问题,开发者写错了一个符号, 把 == 写成了=,或者if else里少写了{}导致分支走向错误。

  • Vue 依赖的组件后门事件,不明组织社工开源开发者,窃取帐号后故意在升级中加入挖矿或窃取比特币的逻辑。

  • int 类型溢出,当公司的业务量上升后,会超过 int 类型可以表达的范围出错,这个问题几乎 BAT 等大公司都被坑过。

  • MD5 碰撞问题,因为hash算法设计问题导致会有一定概率重复,导致账号和订单可能会存在串号和信息读取错误等。

解决思路

我提几个预防这类问题的方法:

1. 对 changelog 和 diff 做 code review

这是个常规的办法,不过考虑到全世界人类使用的开源项目和 lib
数量已经超百万级别,我觉得靠人已经没办法做到了。只能挑重点的项目,以及依赖开源项目自己完善管理。当年就有黑客伪装开发者提 merge request 给
Linux 项目,想暴露一个后门,幸好被 Linux 开源项目组的人发现并禁止了。如果没有 review
机制,大家可以想象有多可怕,全世界的服务器都可能会被不明组织入侵。而 Vue 依赖的组件后门事件则没这么幸运了,导致了事故爆发。

2. 关注未被覆盖的代码覆盖率和特性

这个是更有效的发现方法,为什么呢?大家知道每家公司的工程师都喜欢在自己的 App
里保留一个调试的后门页面。如果有时候配置错了就会暴露,比如淘宝和微博就暴露过。这说明,在正常的功能之外还故意隐藏了一些后门,这些后门的代码其实就隐藏在
App
中,只是大家常规情况下看不到,只要触发了特定的条件就会出现。这既可能是特型开关,也可能是无意留下的开启地狱之门的钥匙。借助于对代码做模型分析和代码路径统计,其实就可以找出来所有隐藏的功能。

3. 源代码智能分析

学术界和黑客界也有一些不错的工具在批量分析开源项目的各种代码分支和数据流走向,尝试发现一些异常问题,我在百度的时候也遇到有项目组在研究这个。大概的做法就是分析所有的代码可能走向,可以是静态代码分析也可能是动态调试技术。尝试分析所有的可能路径,然后判断什么样的输入会带来什么样的问题。这个比较学术,难度挺高。工业界还没有大规模应用,SonarQube
只是一个通用的规则列表,发现的问题还达不到这个深度。不过的确也是一个方向,可能自动发现很多代码问题。也许 SonarQube 可能会越来越能接近这个目标。

总之,人类社会的发展是要重度依赖计算机的,而如何保证计算的正确性是一个任重道远的事情。如何提前发现这类的问题,欢迎测试行业的同学们积极思考和交流。

「编者按」

关于 Ant Design 圣诞彩蛋及其修复方式,官方已经给出解决方案,请参考 https://github.com/ant-design/ant-
design/issues/13848 。

对 Sonar 代码审计,ELK 质量监控技术感兴趣的同学,推荐关注霍格沃兹测试学院的
《测试开发从入门到高级实战》

第八期系列课程,课程将帮助初、中级测试行业技术人员由浅入深,全面提升技能水平,达到一线互联网企业对中高级测试开发工程师的基本技能要求:

  • 熟悉企业内部的测试流程管理和测试策略的制定;

  • 熟悉并精通手工测试常用技能,使用各种工具辅助测试执行;

  • 熟悉掌握各类 UI 自动化技能,胜任企业已有的用户端自动化测试工作;

  • 熟练掌握移动端专项测试,满足非功能测试需求,保证产品的全面质量;

  • 熟练掌握接口测试自动化,胜任接口测试的分析和落地执行;

  • 熟练掌握 Jenkins、Docker 的使用,构建实现企业内部持续集成,辅助公司完成持续交付、DevOps 等高效研发体系落地;接口测试自动化,可以胜任接口测试的分析和执行落地;

点击下图或“阅读原文”了解详情。点击右下角“好看”,并转发文章到朋友圈,截图给小助手,可获取学院精美礼品一份。

推荐阅读

如果你相信,测试开发是你的未来必经之路

如果你相信,必须经历脱胎换骨才能获得新生

如果你相信,有实力有梦想终会有龙门一跃

来霍格沃兹,与最优秀的测试开发者并肩

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
点击获取更多信息

原文地址:https://www.cnblogs.com/hogwarts/p/15825094.html