Simon Willison 发布了一个名为“CSP Allow-list Experiment”的实验性工具,展示了如何利用内容安全策略(CSP)保护下的沙箱 iframe 加载应用,并通过自定义 fetch() 函数拦截 CSP 错误。该工具的核心机制是将这些错误传递给父窗口,父窗口随后会弹出一个对话框,询问用户是否将目标域名添加到 CSP 的 connect-src 允许列表中,并刷新页面以应用更改。
在演示中,沙箱 iframe 试图连接到 https://api.inaturalist.org,但被 CSP 规则阻止。工具会捕获这一错误,并在父窗口中显示提示,用户可以选择添加该域名并刷新。工具还包含一个允许列表管理界面,用户可以在其中查看和添加允许的 fetch() 起源,例如示例中显示的 https://api.github.com。
这一实验展示了 CSP 与 iframe 结合使用的灵活性和潜在的用户交互方式,尤其适用于需要动态调整安全策略的场景。开发者可以借鉴此方法来构建更安全的 Web 应用,同时保持对第三方资源的可控访问。