背景与价值data:与blob: URL可被滥用进行注入或资源占用。统一校验与释放策略可降低风险。统一规范data:禁用:默认拒绝 `data:` 作为导航与脚本样式来源。blob:白名单:仅允许受控创建与受控元素使用。释放策略:创建后使用完毕立即 `revokeObjectURL`。核心实现校验与释放function isDataUrl(u: string): boolean { return u.toLowerCase().startsWith('data:') } function isBlobUrl(u: string): boolean { return u.toLowerCase().startsWith('blob:') } function safeAssign(el: HTMLImageElement, url: string): boolean { if (isDataUrl(url)) return false if (!isBlobUrl(url)) return false el.src = url return true } function makeBlobUrl(data: Blob): string { return URL.createObjectURL(data) } function freeBlobUrl(url: string) { try { URL.revokeObjectURL(url) } catch {} } 落地建议禁用data: URL作为导航/脚本样式来源;blob:仅在受控使用并及时释放。验证清单是否拒绝data: URL;blob:是否受控使用并在结束后释放。

发表评论 取消回复