周四晚七点,罗马尼亚锡比乌,Strada George Barițiu,Biblioteca Județeană Astra Corp B。活动页上的参加人数:0。
下面一条。泰国清迈,Sababa Hummus,Kotchasarn Road Lane 5,Bitcoin Meetup,晚七点,参加人数 1。
不是我扒了谁的隐私库刨出来的。Radius 首页活动流往下翻两页,就在那儿摆着。
一个平台把"办一场线下活动"的成本压到 30 秒,它同时把"贴一个精确坐标"压到了 30 秒。中间本该有的那层东西,它没设计进去。做 agent 的人对这逻辑不陌生——跟给 agent 开"跳过所有确认"是同一回事:省下的是操作步骤,裸露出来的是信任边界。
Radius 定位是 Meetup.com 的替代品,页脚明晃晃印着 Meetup.com alternative,还单留了一个 Migrate from Meetup.com 的入口。按城市发现、活动流、群组、60 秒建群、30 秒发活动,免费。我本来想周末拿它打靶,翻了两页发现不用打——攻击面是写进产品说明里的。
换成攻击者的思路。你把攒一局线下见面的门槛砍到接近零,第一件该问的事是:谁最需要这个零门槛?
不是爱丁堡那个周六骑车、中途停下喝杯咖啡的 Sarah K.。是那些被别处的摩擦挡住的人——办一场"比特币交流"的,办一场"加密货币分享"的,建一个看着像模像样的群、再一点点把人约出来的。摩擦是这些东西的过滤器。过滤器拆了,流量是好看了,上来的是谁,平台自己说了不算。
清迈那场 Bitcoin Meetup,参加人数 1,大概率就是发起人本人。地点在餐馆,晚七点。一个想在那个时间出现在那家餐馆的人,不需要攻破这个平台的任何东西。编一个像样的活动页 → 挂一个像样的地址 → 开报名 → 私聊把人约到点外 → 到。整条链子不需要一行恶意代码。
这里有个区别得说透。
内容平台和见面平台,攻击面不是一个物种。前者被冒充,坏的是名声,大体可回滚——删帖、封号、发个致歉,风头过去就过去了。后者把"一个活人出现在某个坐标"当产品,这个坐标一旦被恶意使用,不可回滚。你没法给一次已经发生的会面按撤销键。那些把年轻人骗到边境的案子,前面全是一段看起来完全正常的社交接触,平台提供的就是这第一段。
我不是说 Radius 会变成那玩意儿。我是说,这个攻击面是它产品形态自带的,不是运营事故,指望"我们加强内容审核"补不上。审核审的是内容,管不了内容背后那个真人几点钟站在哪。
精确地址、群组注册地址、公开活动流,三样一拼,就是一张"谁、什么时候、在哪个坐标"的实时地图。Lock Picking Columbus 的群组地址精确到 3989 Broadway,Grove City,邮编都补齐了,标签挂着 Science & Technology。单看都无害。合起来,对想锁定某个人的人,就是现成的情报。攻击者连爬虫都不用写,打开首页读就行。
顺一句,那条 0 人参加的活动我多盯了一眼:三天前发的,事情就在周四,一个人都没报。一场没有旁人的活动,对一个心思不正的发起人来说,是个绝佳的容器。这话我说得重,可它比客套话有用。
首页那个活动流值得单独拎出来。它不显示内容,显示的是人:"Qdexi T. 和另外 2 人加入了,约 21 小时前。""Ansel F. 和另外 32 人加入了,4 天前。"每一行就是一个去重过的名字加一个时间戳。
这个我一开始判成高危,觉得名字加加入时间摆在公开流里,等于活体人口普查。后来把前提摊开:名字是缩写,时间只是个大致范围,单独拎出来泄露不了多少。级别下调。它真正的作用是配合——活动流的名字和活动页的参加名单一对,群组地址和活动地址一对,"谁、什么时候、在哪个坐标"才落到具体的人身上。别把它当一条独立漏洞看,它是坐标系里的一根轴。单独看它,不用连夜去注销账号。
——离题了,收。
页脚那个举报入口,可举报的类型列了一长串:仇恨言论、骚扰或霸凌、暴力或威胁、垃圾或诈骗、冒充、非法活动、其他。这份清单本身就是平台写给你看的威胁模型——它清楚自己开出来了几种口子。
问题是举报是事后触发的。等你按下那个钮,伤害已经发生了。一个真被约进无人房间的人,之后再来几条举报也救不回来。举报只能当兜底,不能当第一道墙。更难的是,真出事的场景往往够不上一条"可举报内容"——"有个陌生人在一间没旁人的房间里见我",这句话本身不构成违规,直到它变成案卷。你把安全设计挂在一个只认内容的按钮上,它接不住这类事。
Cookie 弹窗是另一码事。接受和拒绝两个钮,说明里写着改善体验、分析站点使用——这是合规动作,不是安全动作。它管的是第三方脚本读不读得到你的轨迹,管不了活动页上那个地址被谁看见。别把一个同意横幅误当成一道防线。
页脚里我最上心的是 Migrate from Meetup.com。迁移意味着把你在别处的社交图谱、群组、活动史搬过来,中间大概率要过一道授权。授权那一刻看它要的是哪几个 scope:只要一个邮箱注册,还是顺手把你的群组关系和成员名单一起拿走。一个群的成员名单,在你眼里是你的社交资产,在别人眼里是一份现成的目标列表。这两种看法之间那段距离,就是你点"同意"之前值得花掉的那 30 秒。
这处我没实测,不下结论,只标位置——迁移入口的权限申请,永远是一个平台信任边界最薄的地方。
给用这类平台的,拆弹清单就这几条:
- 发活动别写自己的私人地址,写一个公共集合点——有前台的楼、咖啡馆、图书馆门口。活动地址和住址一旦重合,你就把家门挂网上了。
- 头一回见陌生人,带一个人,白天,公共场所。这条老得掉牙,可每冒出一个新平台它都能再复现一遍——不是常识被忘了,是产品把"见面"做顺了,顺到你忘了对面是个没见过的人。
- 沟通别被引去不可控的频道。真出事,你需要一条留得下痕迹的记录;"加我别的软件聊"就是主动把这条扔掉。
- 注册用独立邮箱和副号。这类平台注册容易、注销麻烦,别用你身份绑得最紧的那个号。
- 你要是个组织者,审核别只挂在举报钮上。给"新账号发的第一条活动"加一道人工复核,成本低到可笑,能挡掉大部分一次性诈骗号。
给做这类产品的人一句:你删掉的每一处摩擦,先问一句它原本在挡什么。30 秒发活动的另一头,是 30 秒发一条钓鱼;60 秒建群的另一头,是 60 秒建一个窝。删可以,但你得知道你删掉的是效率,还是防线。
分级收一下,省得你看完不知道该不该慌。
精确地址公开可查、活动流和参加名单能交叉——真高危,尤其对独身赴约的人。这条排在所有 cookie、scope 前面,因为它是人身安全,不是信息安全。
Migrate 入口的 scope——中,取决于它实际要几个权限。我没测,只标位置。
"18 位社区探索者在线"——低,就是个在线人数,别被它唬住。
别慌。我不是让你别碰这类平台,线下的好东西它确实能给你凑齐。只是你得记住,你手里这家伙的全部本事,就是把"见到一个陌生人"的成本压到最低——成本压得越低,那层审核你就得自己补回去。
排雷记录:省掉的摩擦从不消失,只是换个地方回来找你。
