2010-11-09 38 views
35

還有的是some discussion on the cap-talk mailing list周圍的Lua和JavaScript是否支持對象的能力模型,結論是,由於通過setfenv限制的環境中調用的函數的支持,並以不可變對象不可僞造引用的可能性,該OCM無法實施。Lua的功能:那裏有什麼經驗?

難道我們看到這是如何工作的?我很感興趣的是從現有的應用程序中刪除漏洞利用非常有用,慷慨的腳本支持,不幸的是允許在各種情況下完全shell訪問。需要一些shell訪問權限:對象能力模型似乎是管理事物的好方法。但我擔心的是,我可以如何說服這種方法,實際上這種方法在可靠的混亂實踐中將是可驗證的。

一些鏈接:

  1. 年長的SO問題:How can I create a secure Lua sandbox?
  2. 背景在erights.org:From Objects To Capabilities
  3. 的Lua維基:SandBoxesReadOnlyTables - 顯示在行動setfenv;顯示在正確的情況下,可以在只讀的表格背後的基本思想
+5

聽起來像你做你的功課。你錯過了什麼? – Zecc 2010-11-15 17:03:18

+3

爲了記錄,我認爲Lua *絕對可以支持OCM。至少,您可以自己編輯liolib.c和loslib.c的源代碼。它應該相對簡單,因爲代碼不那麼複雜。 – Zecc 2010-11-15 17:17:45

+1

@Zecc:理論應用的實際情況,成功與否。無論任何規模。 – 2010-11-15 20:21:50

回答

3

我不能說話給Lua,但對於Javascript,Caja有工具來創建一個合適的沙箱,限制只有某些功能的訪問。它最初是爲構建HTML/JS小部件(如iGoogle上使用的小部件)創建沙箱而創建的。

http://code.google.com/p/google-caja/

下面是從他們的主頁項目的描述:

卡哈(發音爲 「KA-HA」),是一個 西班牙語單詞,意思是盒子,銀行, 收銀機,拱頂;一個容器 貴重物品。 Web開發人員使用 傳統工具,如HTML, JavaScript和CSS;和卡哈提供 一個編譯器(一個「cajoler」),其採用 web應用,併產生一個 「哄騙」 HTML Web應用程序。該 cajoler試圖通過做靜態分析, 並重寫 輸入要添加的運行時檢查它無法驗證安全 性能。

由於Web應用程序使瀏覽器的API,例如共同使用 在的DOM API, ,讓一個龐大的控制 的金額超過了網頁,卡哈提供馴服 的API,虛擬化 DOM的部分。一個包含頁面可以設置 嵌入應用程序的環境,讓 ,嵌入式應用程序認爲 它與 全頁面的DOM互動,但實際上只是 操縱包含頁面 的通過一個名爲機制有界部分 虛擬內聯框架。

Caja應用程序 使用的JavaScript被寫入JavaScript(實際上是EcmaScript5)的故障停止子集 中。 這個子集稱爲「Valija」,幾乎包括整個JavaScript語言 ,但刪除了一些容易出錯的構造,例如使用和限制 如何使用eval。

+0

如果我正確理解了這個項目,我們的想法是我們有一個JavaScript的子集,Cajita,以一種方言編寫,限制以能力傳遞方式訪問數據。我的第一印象是,這對於我所考慮的重構任務來說是一種非常沉重的應用能力,它並沒有真正回答玩具實例之外的基於能力的安全模型。但看看典型的Javascript可以被重構成Cajita可能是有益的。 – 2011-02-07 16:38:04