2

我現在特指 the PLT Scheme make-evaluator之類的東西。哪些語言具有現成的安全評估環境?

它將運行方案的代碼,但在一定條件下:

  • 它只使用的內存可定義量,如果腳本需要更多的將退出執行
  • 它隨着時間的行爲類似於
  • 它限制除了我特別允許的代碼外的所有IO0

是否有人熟悉可以做到這一點的其他任何事情?

+0

JavaScript?但實際上,JavaScript內存分配不受限制。 – 2010-01-26 18:19:20

+1

請注意,PLT沙箱庫會執行一大堆附加工作。例如,初始化某些狀態的模塊將在沙盒環境中重新初始化。最好的方法是在模塊中定義一個'foo'結構體,然後在沙箱內使用'make-foo'並在沙箱外用'foo?'測試值 - 結果是'#f '。 – 2010-01-26 19:01:49

回答

1

Lua可讓您輕鬆定義sandboxes所需的功率。

+0

這看起來沒有PLT沙箱那麼強大 - 具體地說,在不限制運行時和內存的情況下,整個事情最終並不真正安全,因爲它可以讓您在自己的服務器上運行隨機用戶代碼。另一個問題是需要通過限制沙箱環境中的名稱來控制IO - plt沙箱不管名稱如何限制IO(這可以允許某些路徑)。此外,通過設置值與沙箱通訊似乎不太有吸引力...... – 2010-01-26 21:00:27

+0

C api中有可用於限制時間和/或內存的鉤子,郵件列表歸檔可能是一個更好的搜索位置。用一個檢查你的策略規則的標準IO替換爲少於200行的Lua。在Lua中有很多事情,你必須自己推出,但這很容易做到。如果你需要一個完全預建的系統,Lua不適合你。 – Javier 2010-01-26 22:38:05

+0

我懷疑有一些鉤子可以用來限制沙盒環境在一個不受限制的環境中的內存 - 這比多個鉤子涉及的要多得多。標準IO也是如此 - 一個沙箱可以做什麼?*完整* IO到一個目錄,只讀從另一個目錄,網絡到單個IP? – 2010-01-27 02:40:37

0

PHP允許類似eval的東西 - 雖然在調用它之前需要用ini_set設置一些限制值,它們也會影響當前腳本。

0

Java平臺提供細粒度的訪問控制和沙箱。 這不完全等同於make-evaluator,但API允許您將約束放置在任意對象上(通過GuardedObject類)。您還可以限制從特定源加載的類的權限。

這可能有助於閱讀Java Platform Security Architecture spec

請注意的Java API可以從大多數語言在JVM上進行訪問。