我正在寻找沙盒Java 8的Nashorn javascript引擎。我已经发现了--no-java标志,这很有帮助,但我还发现了以下链接,其中指出需要“在启用SecurityManager的情况下运行”:http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-September/002010.html
我还没有找到留档说明如何与Nashorn一起完成,那么应该如何安全地完成呢?
与java命令不同,似乎不可能通过设置java来启用安全管理器。安全jjs命令行上的manager属性。(这可能是一个bug。)但是,您可以从JavaScript调用Java API来启用安全管理器。在Java中,这是
System.setSecurityManager(new SecurityManager());
在JavaScript/Nashorn中,除了提供完全限定的类名之外,它几乎是一样的:
java.lang.System.setSecurityManager(new java.lang.SecurityManager())
(或者,您可以导入名称。)您可以将这一行放到应用程序脚本中,也可以将其放到应用程序脚本之前的jjs命令行中。
例子:
$ cat userhome.js
print(java.lang.System.getProperty("user.home"))
$ jjs userhome.js
/Users/xyzzy
$ cat secmgr.js
java.lang.System.setSecurityManager(new java.lang.SecurityManager())
$ jjs secmgr.js userhome.js
Exception in thread "main" java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.home" "read")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:457)
[...snip...]
但是,在命令行上设置策略文件确实有效:
$ cat all.policy
grant {
permission java.security.AllPermission;
};
$ jjs -Djava.security.policy=all.policy secmgr.js userhome.js
/Users/xyzzy
或者,您可以在启用安全管理器之前添加等效的setProperty
调用:
$ cat secmgr.js
java.lang.System.setProperty('java.security.policy', 'all.policy')
java.lang.System.setSecurityManager(new java.lang.SecurityManager())
可以使用启用安全管理器的jjs
执行脚本。
jjs -J-Djava.security.manager myscript.js
或
jjs -J-Djava.security.manager
用于交互模式。请注意,如果您只使用-Djava。安全管理器,则该选项由jjs工具处理。要将选项传递给VM,必须使用-J前缀。除了启动工具“java”之外,任何其他JDK bin工具都是如此。
我知道你可能不再需要它了,但对于那些来到这里寻找在沙盒中运行nashorn的简单方法的人来说:如果你只是想阻止脚本使用反射,那么设置一个类过滤器。这样,您可以只允许使用一些可用的类。。。或者根本没有。
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine scriptEngine = factory.getScriptEngine(
new String[] { "--no-java" }, //a quick way to disable direct access to java API
null, //a ClassLoader, let's just ignore it
new ClassFilter() { //this one simply forbids use of any java classes, including reflection
@Override
public boolean exposeToScripts(String string) {
return false;
}
}
);
即使我在Mule EE上运行,Mule Security Manager依赖性也没有得到解决。代码如下: http://www.mulesoft.org/schema/mule/spring-security http://www.mulesoft.org/schema/mule/spring-security/current/mule-spring-security.xsd http://www
我有一个WildFly 10.1环境,我在其中使用以下配置启动容器: 当我没有指定参数时,实例启动,测试执行得很好;但是,当我使用安全管理器使用安全管理参数触发时,我得到以下异常: 我需要使用安全管理器来执行我的Arquillian测试用例,我不清楚在我的配置中会遗漏什么。 相关的毕业生图书馆是:
有没有办法给管理servlet增加登录安全性? 似乎在V0.7中,您可以将以下两个添加到您的yaml文件中: 然而,我在最新版本(0.9.2)中尝试了,它给我一个错误,说:server.yaml有一个错误: 这是我拥有的:
1. 前言 安全管理是软件系统必不可少的的功能。根据经典的 “墨菲定律”—— 凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题。 本节就来演示下,如何使用 Spring Boot + Spring Security 开发前后端分离的权限管理功能。 2. Spring Security 用法简介 作为一个知名的安全管理框架, Spring Security 对安全管理功能的封装已经非常完
我正在使用Spring Boot安全性和Oauth2。我不想禁用健康endpoint的安全性。 我可以完全禁用安全性,或者编写自己的实现并禁用autoconfigured One。 但是如何修改()的现有实现? 我试图创建自己的配置而不禁用AutoConfigurated一个,但由于冲突,这是不可能的。 以下是错误消息: 此外,我试图显式地为我自己的安全配置设置更高的顺序,但看起来自动配置的一个覆
我正在使用故障保护(https://github.com/jhalterman/failsafe)作为我的重试逻辑框架,我想更多地了解故障保护的“运行”方法是如何工作的。 假设我有: 那么当运行时,是否会阻止MyMONt款额的执行?换句话说,是否会在所有重试完成之前执行?