背景与价值跨窗口通信可被滥用导致数据泄露。统一来源校验与数据协议可保证仅受控页面接收可信消息。统一规范通道命名:使用唯一通道名并限制消息类型集合。来源校验:对 `document.origin` 与目标来源进行校验。数据结构:统一字段与类型校验,拒绝不合规消息。核心实现BroadcastChannel治理const channelName = 'app-events' const allowOrigins = new Set(['https://app.example.com']) type Msg = { type: 'PING' | 'SYNC'; payload?: any } function validMsg(m: any): m is Msg { return m && (m.type === 'PING' || m.type === 'SYNC') } function startChannel() { const bc = new BroadcastChannel(channelName) bc.onmessage = (ev) => { const m = ev.data if (!validMsg(m)) return // 处理消息 } return bc } Storage事件治理function startStorageListener() { window.addEventListener('storage', (ev) => { if (ev.key !== 'app:event') return try { const m = JSON.parse(ev.newValue || '{}') if (!validMsg(m)) return } catch {} }) } 来源校验示意function originAllowed(): boolean { try { const u = new URL(document.location.href); return allowOrigins.has(u.origin) } catch { return false } } 落地建议统一通道命名与消息类型,限制消息面;对Storage事件内容执行严格解析与校验。校验页面来源仅在受控域下启用通信模块,避免跨站滥用。审计与监控异常消息与来源,及时处置通信链路风险。验证清单通道命名与消息类型是否统一;来源是否受控;数据结构是否校验通过。

发表评论 取消回复