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 在資料新聞領域的根基,現在透過自定義介面和視覺化,幫助使用者從資料中發掘故事。