辟谣!扒了一下西安一码通的接口,这才是崩溃的真实原因!

共 2849字,需浏览 6分钟

 ·

2022-01-13 01:37


最近西安一码通二次崩溃这个事情,实在是太顶了。

网上一直在说崩溃是因为后台传输的是图片?



第一次看到这个消息的时候,我是抱有怀疑态度的。毕竟大家都知道这种大的政府项目都是要招标的,能中标到项目的公司也肯定不会差,怎么会犯这么低级的错误呢?


今天又在知乎上看到了知友 “卢兴民” 的回答,别人是真的去分析了二维码接口数据的,证明并不是在服务器生成图片。


西安健康码的接口数据



真正的二维码数据是 /person/app/refreshQRCode这个接口



这位知友表示:


看下这个接口返回,设计上也没有太大的问题。 


主要问题集中在所有的js/css/img这些静态资源全都从从一个出口进行提供,没上CDN


粗略估算了一下,js/css/img数据总共约500kB


按照从某个群里得到的数据,暂且认为是准的,健康码的请求量峰值达到了3.3w qps


搜索公众号互联网架构师回复“2T”,送你一份惊喜礼包。


那按照这个量估计 33000 x 500 x 8 bps ≈ 125Gbps  这个出口量级很难用单机房承载,峰值一来,出口网卡打满,直接gg。


到写这个回答时,西安健康码还是没有将静态资源上CDN,之后看看访问量再起飞的时候,能不能扛得住吧。


还有一位知友 “知乎用户xv4Ddk” 就更详细了,扒证据的详细步骤都写出来了。

知乎回答原文如下:


想直接抓 HTTP 包


惦记通过 PC 微信打开「西安市民一码通」抓个包,结果发现「个人电子码」注册时需要以西安的地址注册


常住或临时地址都只能选择西安的区/县


怕万一给我健康码搞红了,所以没敢继续……

简单的路走不通,只能换一条复杂点的


那就看看这个小程序咋写的吧


因为自己是苹果手机,于是找出之前用过的安卓模拟器(为啥不是虚拟机?因为我电脑里没有 Android Studio 之类…)

我真的不是拿这个(安卓模拟器)玩游戏,我发誓……


具体步骤




Wxapkg就是缓存到本地的微信小程序包



解包出来的小程序源代码


  • 从源码的 pages\index\index.wxml 中找到了个人电子码,及其绑定的点击事件「onElectronCode」,进而跟踪到「onYmtLogin」->「toYmtLink」-> 「toElectronCode」


找到了一码通的地址,原来是小程序打开外部网页

其中

N = getApp(),






function qrcodeColour(e, t, a, o) {    var s = baseUrl + "/view/login.html?code=" + t      , i = 300      , r = 300      , n = i      , d = r      , p = 80      , l = 80      , c = (i - p) / 2      , u = (r - l) / 2      , m = $(e).qrcode({        render: "canvas",        text: s,        width: i,        height: r,        background: "transparent",        foreground: a    })      , g = m.find("canvas").get(0)      , C = new Image;    C.src = g.toDataURL("image/png"),    C.onload = function() {        g.width = n,        g.height = d;        var e = g.getContext("2d");        e.fillStyle = "#ffffff",        e.fillRect(0, 0, g.width, g.height),        e.drawImage(C, 0, 0);        var t = new Image(p,l);        t.src = o,        t.onload = function() {            e.drawImage(t, c, u, p, l)        }    }}


最终结果:没有服务端生成二维码图片!


相关链接


‍https://www.zhihu.com/question/509914161/answer/2299099095‍

‍https://www.zhihu.com/question/509914161/answer/2299646933‍

相关阅读:2T架构师学习资料干货分享

全栈架构社区交流群

 「全栈架构社区」建立了读者架构师交流群,大家可以添加小编微信进行加群。欢迎有想法、乐于分享的朋友们一起交流学习。

扫描添加好友邀你进架构师群,加我时注明姓名+公司+职位】

看完本文有收获?请转发分享给更多人


往期资源:


Flutter 移动应用开发实战 视频(开发你自己的抖音APP)
Java面试进阶训练营 第2季(分布式篇)
Java高级 - 分布式系统开发技术视频
浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报