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 應用,同時保持對第三方資源的可控訪問。