【发布时间】:2015-08-24 10:17:09
【问题描述】:
我想创建一个安全的 ColdFusion 环境,为此我使用了多个沙箱配置。使用友好的管理员界面可以轻松完成以下任务:
- 限制 CFtag,例如: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();
问题是我找不到任何允许我禁用这两个类的解决方案:createObject() 的java.lang.Runtime 和java.lang.ProcessBuilder。
注意:我也尝试过 sanbox 和 os 权限中的文件限制,但不幸的是,它们似乎只适用于 I/O 文件操作,我不能弄乱系统库的安全策略,因为它们可能在内部使用由 ColdFusion 提供。
【问题讨论】:
-
您可以通过 GUI 禁用
CreateObject(Java)功能还是限制性太强?设置Disable access to internal ColdFusion Java components下的管理员设置呢?你检查了吗? -
糟糕!没关系,我看到您已经在问题中提到禁用对内部 ColdFusion Java 组件的访问。
-
我找到了一篇类似的文章。他们在其中谈论共享托管环境中的安全性,但提到的问题与您发现的相同。不幸的是,他们也没有给出解决方案。 所以主机商面临一个艰难的选择:禁用 CFEXECUTE、CFOBJECT、CreateObject(.NET)、CreateObject(COM) 和 CreateObject(JAVA),或者接受共享主机配置中没有任何安全性。 - jochem.vandieten.net/2008/12/09/…
-
根据我的阅读,您通常会实现某种SecurityManager。 (这可能甚至是 CF 实现沙盒功能的方式)。但是,我不知道安全策略会对 CF 代码的其余部分产生什么影响(如果有的话)。
-
澄清一下,是的,当您启用沙盒安全性时,ColdFusion 会使用安全管理器。来自文档:要在 J2EE 版本中使用沙盒安全性,应用程序服务器必须运行安全管理器 (java.lang.SecurityManager) 并且您定义以下 JVM 参数(对于 Tomcat,这是 java.args 行在 cf_root/cfusion/bin/jvm.config 文件中) -
-Djava.security.manager "-Djava.security.policy=cf_root/WEB-INF/cfusion/lib/coldfusion.policy" "-Djava.security.auth.policy=cf_root/WEB-INF/cfusion/lib/neo_jaas.policy"
标签: coldfusion jvm-arguments java-security cfadmin