我有一个服务器应用程序,它接收从客户端上传的java代码,然后需要根据其中的方法调用进行处理。
我的第一个想法是编译它 - 运行它但是当我想到它时... ding ding安全性。我如何限制特定代码执行运行的调用,例如:它可以执行基本的java jazz(for loops等等)访问像Math这样的重要类,并从我的服务器访问一些方法,但没有它可以伤害或做任何坏事到服务器。
答案 0 :(得分:0)
运行上传的代码时,您需要在运行时定义策略。来自Oracle关于Default Policy Implementation and Policy File Syntax的文档:
在运行时指定其他策略文件
在调用应用程序的执行时,还可以指定其他或不同的策略文件。这可以通过" -Djava.security.policy"来完成。命令行参数,用于设置java.security.policy属性的值。例如,如果您使用
java -Djava.security.manager -Djava.security.policy=someURL SomeApp
其中someURL是指定策略文件位置的URL,除了安全属性文件中指定的所有策略文件外,还将加载指定的策略文件。
您可以使用该策略中的权限来限制代码可以执行的操作,例如:
permission java.io.FilePermission "/home/user/*", "read";
我希望这有帮助!