PostMessage 这个 API 就像快递柜——你觉得东西放进去只有收件人能拿,实际上谁都能伸手。
最近一位开发者在复盘自己写的登录页时发现,窗口弹出的 OAuth 回调窗口,居然能往父页面随便塞数据。他原本以为 origin 校验是道铁门,结果发现只是块「请勿打扰」的牌子。
问题出在代码里那个看似无害的 `event.source.postMessage`。攻击者只要开个同名窗口,就能冒充身份给主页面发指令。开发者原话:「我以为我在验身份证,其实只看了对方穿什么衣服。」
这类漏洞的隐蔽性在于,它不像 XSS 那样留下明显痕迹。消息来回传递时,开发者往往只关心「有没有收到」,忘了问「是谁发的」。Medium 上这篇学习笔记的评论区里,有人贴了自己 2021 年的项目——同样的问题,同样的自信,同样的翻车。
修复方案倒不复杂:把 `event.origin` 和预期域名做严格比对,同时校验 `event.source` 是不是你真正打开的那个窗口。但更多人选择的做法是,直接关掉跨域通信,宁可功能残一点。
那位开发者在笔记最后加了一句:现在每次看到 `addEventListener('message')`,都会想起那个下午——代码跑通了,安全感碎了一地。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.