假设我有一个人们提交java源代码的网页(一个简单的类)。
我想在我的服务器上编译和运行代码,但自然我想阻止人们伤害我的服务器,那么如何禁用java.io.*
和我选择的其他函数/库?
源代码的正则表达式将是一种方式,但如果可以将某些参数传递给javac
或java
,那么它会“更好”。
(这在创建AI竞赛或者实现单个类的时候非常有用,但我想防止篡改java环境。)
答案 0 :(得分:7)
如果您完全控制JVM,则可以使用安全策略来执行此操作。这是Web浏览器托管applet时采用的相同方法。
http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html
希望这有帮助。
答案 1 :(得分:2)
根据您的意图,您可以与运行javabat.com的Nick Parlante交谈 - 它几乎完全符合您的描述。我不知道他是否愿意分享他的解决方案,但他可能会给你一些特别的帮助。
答案 2 :(得分:2)
我的建议是不要这样做。至少,不要这样做,除非你愿意并准备好接受运行服务器被黑客入侵的机器的后果。也许是同一网络上的其他机器。
答案 3 :(得分:0)
Google App Engine使用的方法是将类列入白名单 - 也就是说,它们可能未加载,或者类本身已更改并且库已重新编译,因此无法进行IO或其他系统调用。也许你可以通过重新编译像http://jikesrvm.org/这样的jvm来尝试这个。
答案 4 :(得分:0)
您始终可以在自定义类加载器中运行代码。这使您可以完全控制要接受的内容。