背景与价值跨窗口通信可被滥用导致数据泄露。统一来源校验与数据协议可保证仅受控页面接收可信消息。统一规范通道命名:使用唯一通道名并限制消息类型集合。来源校验:对 `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事件内容执行严格解析与校验。校验页面来源仅在受控域下启用通信模块,避免跨站滥用。审计与监控异常消息与来源,及时处置通信链路风险。验证清单通道命名与消息类型是否统一;来源是否受控;数据结构是否校验通过。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部