QQ群采集脚本里那串/api/v2/member/list?region=shenzhen&isp=cmcc,我第一次看见是在一个没关的DevTools窗口里。不是刻意去查,是切到Network面板时它自己跳出来的。旁边还跟着头像URL:。510100——成都锦江区。没注释,没变量,没配置项,就赤裸裸焊在路径里。
别信grep说“没找到geo”
上个月帮电商中台扫前端仓库,他们用自研正则脚本过了一遍27个repo。报告说“未发现显式GEO调用”。审计组随手抽了3个,人工翻了两天,漏掉41处。
JSON.stringify({geo: btoa(`${lat},${lng}`)})这种写法,base64根本不是加密,是把字符串换了个马甲。还有人把city_id=110100塞进localStorage键名:localStorage.setItem('user_geo_110100_v2', ...)。grep当然扫不到。AST解析器也得兜个大圈子:先解构赋值,再看key是否含六位数字区划码,最后还得回溯这个值是不是从或IP解析接口来的。
同一串110100,在fetch('/log?city_id=110100')里只是埋点,在new Worker('geo_worker.js?city_id=110100')里却是初始化地域策略。字符串完全一样,风险等级却差两级。
你真觉得grep能守住底线?它连atob("MTEwMTAw")解出来是啥都懒得算。
装Ollama我踩过的坑
本地跑yh blog AI插件前,得先装Ollama。Mac上看起来很顺,但实际拉时卡在三分钟。后来才发现是公司代理把的证书链截断了。临时关代理不行,得手动加--insecure参数启动服务:。再跑插件才真正开始分析代码流。
它不靠关键词匹配。整段JS被喂进去后,先做AST解析,再叠一层控制流图。看到page.goto('https://qun.qq.com/...?geo=wtmk3e'),它会顺着Puppeteer的page对象往上扒:前一步有没有注入地理伪装逻辑?后一步有没有监听响应、过滤含geo的URL?这些动作串成一条链,才敢标“L2风险:疑似规避真实定位上报”。
isp: cmcc这种字段,它要看上下文。出现在fetch('/speedtest?isp=cmcc')里,标记为“网络测速依赖”;但若和userId、device_id一起打进analytics.track(),立刻升为“L3高危:多源融合画像”。不是查规则库,是推JavaScript运行时的真实意图。
上周试了个PyQt5群控界面。静态扫描工具完全漏掉这行:QNetworkAccessManager.get(QUrl('https://api.qq.com/v3/user?geo=shanghai'))。因为PyQt的QUrl构造不在JS执行链里。yh blog插件却从UI事件槽函数开始逆向追踪,一路摸到self.geo_combo.currentText()绑定的信号,最后连下拉框选项列表都纳入判定范围。
它压根不认“geo”这个字符串。真正让它停顿的,是代码里那些藏在 navigator.geolocation.watchPosition() 里的坐标回调、localStorage 里存的 city_id、甚至 CSS 中用 container-type: size 触发的地域适配逻辑——系统在看意图,不是在查字典。
QQ群Web端的geo,跟企业微信不是一回事
企业微信JS-SDK返回的location对象,字段清清楚楚:geo_type: 'wgs84',,连误差半径都标好了。
QQ群Web端呢?你得从HTTP Referer里抠出referer=https://qun.qq.com/qunpro/...&geo=shenzhen,再结合当前页面URL里的/group/123456789/反查群属地,最后比对腾讯开放平台文档里那张已废弃的“群地域映射表V2.1(2024年停用)”。两套系统,“geo”这个字段名都长得不一样。
yh blog插件内置7类推理模板,但真正起作用的是动态切片。当它在里读到"platform": ["qq", "wx"],会自动拆成两个子分析流:WX侧放行getLocation写入geo_type,QQ侧同逻辑直接标黄。不是粗暴禁用,是按平台能力边界做灰度判断。
有次我故意把localStorage.setItem('qq_geo_cache', cityCode)改成localStorage.setItem('wx_geo_cache', cityCode),插件报告里那条风险就消失了——它认出了字段命名与平台标识的错位。
上线前手忙脚乱补 GEO 检查?不如让 yh blog 插件在 PR 里直接标出 QQ 群采集脚本里那些 hardcode 的城市 ID、IP 归属库调用、甚至 `navigator.geolocation` 的裸用位置——不是等法务发邮件,是提交时就看见红色波浪线。
评论