Java Sandbox API - 拒绝访问已使用的类

标签 java security classloader sandbox securitymanager

我对 java-sandbox API 有点挣扎.考虑以下代码:

Sandkiste.java:

import java.util.List;
import java.util.concurrent.TimeUnit;

import net.datenwerke.sandbox.*;
import net.datenwerke.sandbox.SandboxContext.AccessType;
import net.datenwerke.sandbox.SandboxContext.RuntimeMode;
import net.datenwerke.sandbox.handlers.BadThreadKillHandler;

public class Sandkiste {


     public static void main(String[] args) {
         Sandkiste s = new Sandkiste();
         s.run();

     }

      public void run(){
        SandboxService sandboxService = SandboxServiceImpl.getInstance();




        /* configure context */
        SandboxContext context = new SandboxContext();

        context.addClassForApplicationLoader("Test");

        context.addClassPermission(AccessType.PERMIT, "Test");
        context.addClassPermission(AccessType.PERMIT,UntrustedCode.class.getName());
        context.addClassPermission(AccessType.DENY, "java.lang.System");
        context.addClassPermission(AccessType.DENY, "java.io.PrintStream");




        context.setRunInThread(true);



        /* run code in sandbox */

        SandboxedCallResult<List<String>> result = sandboxService.runSandboxed(UntrustedCode.class, context);

        /* output result */
      }
}

UntrustedCode.java:

import java.util.List;

import net.datenwerke.sandbox.SandboxedEnvironment;

public class UntrustedCode implements SandboxedEnvironment<List<String>> {

    @Override
    public List<String> execute() throws Exception {  
        Test t = new Test();
        t.print();

        return null;
    }
}

测试.java:

public class Test {
    public void print() {
        System.out.println("Erlaubt!");
    }
}

我想拒绝在沙箱中执行的所有类中访问 System.class 但是 尽管拒绝了 System.class 的许可,类“Test”仍然能够调用 System.class 的方法。有没有办法实现这一点?

最佳答案

我认为你应该删除这条线

context.addClassForApplicationLoader("Test");

我只能猜测,但看起来它使 Test 类的行为不受 SandBox 的控制,而是在“正常”类加载器的控制下。

关于Java Sandbox API - 拒绝访问已使用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524636/

相关文章:

Java认证安全

java.lang.NoClassDefFoundError::Tomcat 中给定路径中存在的类

java - 从容器请求中提取路径参数

java - 对类进行子类化以更改 Kotlin 中类型参数的方差

java - Hibernate ManyToMany 多个条目

java - Bukkit/Spigot API : Mapping damager and Victim

jsp - 基本身份验证 : Is it possible to setRemoteUser like getRemoteUser()

java - jBCrypt 替代品?官方线程安全,拥有更大的社区

java - 在 JVM 中加载类时,类的不同部分以什么顺序初始化?

java - Websphere httpclient NoSuchMethodError org.apache.http.conn.Scheme