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

发表评论 取消回复