[英]Is it possible to limit allowed JRuby commands in a Java application?
我在Java應用程序中使用JRuby,以允許用戶運行其腳本。 應用程序正常功能所需的操作集並不大。 該腳本應控制Java代碼中的某些變量,並在執行過程中更改過程。
因此,我想有機會限制允許的操作數。 說,我不希望用戶可以訪問文件系統。
f = File.new("myfile.txt", "w")
f.puts( "Hello!" )
f.close
這應該被禁止。
我該如何設置? 我唯一的想法是在啟動之前解析用戶腳本,並將腳本與允許的操作白名單進行比較。
您應該做的是創建允許命令的白名單。 如果發現腳本包含不在白名單中的命令,則需要拒絕整個腳本。 正如安德魯·湯普森(Andrew Thompson)所指出的那樣,安全經理是一個很好的額外層,但這並不是安全層的終結。 我認為在沙盒小程序中運行並不會給您帶來多少好處,因為您仍然必須確定腳本是否有效。
白名單示例
通常,當您生成白名單時,希望用戶能夠選擇的選項/命令數量有限,其余選項/命令將被丟棄。 您將創建一些枚舉或最終數據結構(以最小化其在運行時被惡意程序修改的能力)。 如果您希望用戶只能選擇調用函數foo
而不選擇bar
,則可以編寫如下代碼,它是完全原始的,但可以說明概念:
class WhiteList
{
allowedCommands = ["foo"];
}
在你的主要是這樣的:
class Main
{
for(Command command in userInput)
{
if(command not in allowedCommands)
{
log security message;
continue/break
}
}
}
安裝用於用戶代碼的SecurityManager
1 。 甚至更容易地,從沙盒小程序或JWS啟動的應用程序中運行代碼。
安全管理器是允許應用程序實施安全策略的類。 它允許應用程序在執行可能不安全或敏感的操作之前確定該操作是什么以及是否在允許執行該操作的安全上下文中嘗試該操作。 應用程序可以允許或禁止該操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.