Datasette Apps:在 Datasette 中託管自定義 HTML 應用程序
Datasette Apps 是一個新插件,允許用户在 Datasette 實例中通過嚴格沙盒化的 iframe 運行自包含的 HTML+JavaScript 應用程序。這些應用可以執行只讀 SQL 查詢,並可通過存儲查詢支持寫操作。該插件利用 iframe sandbox 屬性和內容安全策略(CSP)確保安全,使用 postMessage 和 MessageChannel 實現鎖定 API,並支持通過可複製提示由 AI 生成應用代碼。文章還討論了安全漏洞修復、日誌記錄以及 Datasette 從數據展示向豐富工具生態系統演進的願景。
Datasette 推出了一款名為 Datasette Apps 的新插件,它使用户能夠在 Datasette 實例中託管和運行自包含的 HTML+JavaScript 應用程序。這些應用運行在高度受限的 iframe 沙盒中,無法訪問父頁面的 DOM、cookies 或 localStorage,並且通過注入內容安全策略(CSP)頭來阻止向外部主機發送 HTTP 請求,從而防止惡意或存在缺陷的應用泄露私有數據。
該插件的核心是提供一種安全的方式來擴展 Datasette 的功能。應用可以使用 JavaScript 對 Datasette 中的數據庫執行只讀 SQL 查詢,如果配置了存儲查詢,還可以執行寫入操作。最初,這一功能是為 Datasette Agent 設計的類似 Claude Artifacts 的機制,但後來被提升為 Datasette 生態系統中一個獨立的概念。
在技術實現上,Datasette Apps 使用了 iframe sandbox="allow-scripts" 結合 CSP 的巧妙組合。開發者發現,通過在 HTML 頁面開頭使用 <meta http-equiv="Content-Security-Policy"> 設置策略,可以進一步限制 iframe 的能力,而且惡意 JavaScript 無法修改或移除該頭。為了在鎖定框架的同時允許受控的操作,插件先使用 postMessage() 實現了一個簡單協議,隨後遷移到 MessageChannel() 以提高安全性——當頁面導航到其他位置時,通道會自動關閉,防止來自不可信外部頁面的命令執行。
此外,Datasette Apps 還包含了可見的查詢和錯誤日誌功能,幫助開發者調試應用。對於寫操作,它利用 Datasette 1.0a31 中升級的存儲查詢功能,允許用户創建特定的寫入查詢,並僅授權給特定應用使用,從而降低了風險。
一個顯著的特點是,創建應用的表單末尾包含一個可複製的提示,其中包含了所有必要信息(如選定數據庫的架構)。用户可以將這個提示粘貼到 ChatGPT、Claude 或 Gemini 等 AI 工具中,讓它們生成相應的 HTML 代碼。如果安裝了 Datasette Agent,AI 助手還能直接創建和編輯應用。
在開發過程中,AI 輔助發揮了重要作用。最初的原型使用 Claude Opus 4.6 構建,隨後 GPT-5.5 幫助設計了整體架構,Claude Fable 5 則進行了一次安全評估,發現了一個嚴重漏洞:低權限用户可以通過創建應用並利用 CSP 允許列表,誘騙管理員訪問並竊取其數據。該問題通過引入 apps-set-csp 權限和站點級 allowed_csp_origins 配置得到修復。
總體而言,Datasette Apps 標誌着 Datasette 從只讀數據服務向更豐富工具生態系統的演進。它延續了 Datasette 在數據新聞領域的根基,現在通過自定義界面和可視化,幫助用户從數據中發掘故事。