gpt4 book ai didi

coldfusion - 如何在某些 java 类或包上限制 createObject()?

转载 作者:行者123 更新时间:2023-12-04 02:18:52 25 4
gpt4 key购买 nike

我想创建一个安全的 ColdFusion 环境,为此我使用了多个沙箱配置。使用友好的管理员界面可以轻松完成以下任务:

  • 限制 CFtags,例如:cfexecute、cfregistry 和 cfhttp。
  • 禁用对内部 ColdFusion Java 组件的访问。
  • 第三方资源只能访问某些服务器和端口范围。

  • 而其他人则相应地使用 Web 服务器的配置。

    问题:

    所以我对设置感到满意,只是后来遇到了,不管 cfexecute 的限制如何。标签一可以使用 java.lang.Runtime轻松执行系统文件或脚本;
    String[] cmd = {"cmd.exe", 'net stop "ColdFusion 10 Application Server"'};
    Process p = Runtime.getRuntime().exec(cmd);

    或使用 java.lang.ProcessBuilder :
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", 'net stop "ColdFusion 10 Application Server"');
    ....
    Process myProcess = pb.start();

    问题是我找不到任何允许我禁用这两个类的解决方案: java.lang.Runtime & java.lang.ProcessBuilder对于 createObject() .
    注意:我也尝试过 sanbox 和 os 权限中的文件限制,但不幸的是,它们似乎只适用于 I/O 文件操作,我不能弄乱系统库的安全策略,因为它们可能在内部使用由冷融合。

    最佳答案

    遵循@ Leigh 的有用建议和@ Miguel-F ,我尝试实现 Security ManagerPolicy .结果如下:

    1. 在运行时指定附加策略文件而不是更改默认值 java.policy文件。为了实现这一点,我们使用 CFAdmin 接口(interface)将以下参数添加到 JVM 参数,或者将其附加到 jvm.args jvm.config 中的行文件 :

    -Djava.security.manager -Djava.security.policy="c:/policies/myRuntime.policy"


    jre\bin\ 内有一个不错的 GUI 实用程序调用 policytool.exe这使您可以轻松有效地管理策略条目。

    2. 我们已强制执行安全管理器并提供了我们的自定义安全策略文件,其中包含:
        grant codeBase "file:///D:/proj/secTestProj/main/-"{
    permission java.io.FilePermission
    "<<ALL FILES>>", "read, write, delete";
    };

    这里我们设置 FilePermission将所有文件发送至 read, write, delete不包括 execute从列表中删除,因为我们不希望使用 java 运行时执行任何类型的文件。

    注:如果我们希望将策略应用于所有应用程序而不考虑来源,则可以将代码库设置为空字符串。

    我真的很想要一个 deny策略文件中的规则以使事情变得更容易,类似于 grant我们正在使用的规则,但不幸的是没有。如果您需要制定一套复杂的安全策略,您可以使用 Prograde库,它使用拒绝规则( stack ref. )实现策略文件。
    你当然可以替换 <<ALL FILES>>使用单个文件并相应地设置权限或为了更好的控制使用 <<ALL FILES>> 的组合和个人文件权限。

    引用文献: Default Policy Implementation and Policy File Syntax , Permissions in JDKControlling Applications

    这种方法解决了我们的核心问题:通过指定文件允许的权限来拒绝使用 java 运行时执行文件。在其他方法中,我们可以实现 Security Manager直接在我们的应用程序中从那里定义策略文件,而不是在我们的 JVM 参数中定义它。
    //set the policy file as the system securuty policy
    System.setProperty("java.security.policy", "file:/C:/java.policy");
    // create a security manager
    SecurityManager sm = new SecurityManager();
    //alternatively, get the current securiy manager using System.getSecuriyManager()
    //set the system security manager
    System.setSecurityManager(sm);

    为了能够设置它,我们需要策略文件中的这些权限:
    permission java.lang.RuntimePermission "setSecurityManager";
    permission java.lang.RuntimePermission "createSecurityManager";
    permission java.lang.RuntimePermission "usePolicy";

    使用 Security Manager应用程序中的对象有其自身的优势,因为它公开了许多有用的方法 例如: CheckExec(String cmd)它检查是否允许调用线程创建子进程。
    //perform the check
    try{
    sm.checkExec("notepad.exe");
    }
    catch(SecurityException e){
    //do something...show warning.
    }

    关于coldfusion - 如何在某些 java 类或包上限制 createObject()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734710/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com