尝试将应用程序移植到其上时,我遇到了一个问题,JApplet因此它可以在浏览器上运行.
课程内容:
CustomClassLoader实现.存储在网站上.问题:
我NoClassDefFoundError试图用我的内容目录加载.class文件CustomClassLoader.
这个错误虽然无法实现,但却与jar中的一个类有关.这门课是抽象的.内容目录中的所有.class文件都扩展此类并填充所有必需的方法.加载这些类后,将引发错误.该程序在正常运行时运行java -jar file.jar良好.
这让我相信它与classpath有关.
安全设置:
我正在通过appletviewer命令运行applet,如下所示:
appletviewer -J-Djava.security.policy=policy file.html
Run Code Online (Sandbox Code Playgroud)
在同一目录中是我的策略文件:
grant {
permission java.lang.RuntimePermission "getenv.APPDATA";
permission java.io.FilePermission "<<ALL FILES>>", "read, write, delete, execute";
permission java.lang.RuntimePermission "exitVM";
permission java.util.PropertyPermission "user.name", "read";
permission java.lang.RuntimePermission "createClassLoader";
};
Run Code Online (Sandbox Code Playgroud)
据我所知,没有其他安全例外被抛出.小程序已签名.
用于加载Applet的HTML文件:
<!DOCTYPE html>
<html>
<body>
<object width="1000" height="600" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0">
<param name="archive" value="file.jar"/>
<param name="code" value="package.to.Boot"/>
</object>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助解决这个问题.
CustomClassLoader.java:
package org.obicere.cc.methods;
import java.io.File;
public class …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应该在 Ubuntu 上的 Tomcat 上运行的 Web 应用程序。在 Ubuntu 上,Tomcat 默认配置为与 Java SecurityManager 一起运行。除了我自己的 Web 应用程序之外,只会有一些众所周知的第三方 Web 应用程序与我自己的相关,例如 BIRT 报告引擎。
如果其中一个 Web 应用程序出现故障或受到威胁,它可能会无害地关闭所有其他应用程序,因为它们都属于一起。我不会发生的情况是,受感染的 Web 应用程序会危及系统本身,例如调用 rm -r /
我是否需要使用 java 安全管理器来实现这一点?还是只需要保护一个 Web 应用程序免受另一个 Web 应用程序的影响?我真的很想阻止为我打算使用的所有 3rd 方 Web 应用程序创建 .policy 文件的努力。
Java SecurityManager是否有任何其他实现(例如在OSS项目中)可用,它具有比JDK更多的功能?
我正在寻找像这样的功能
security.policy文件以外的其他数据源读取file.encoding或line.separator禁止对user.home的读访问"我很确定应用程序服务器(至少是商业服务器)有自己的SecurityManager实现或至少有自己的策略配置.我想知道是否有任何类似要求的免费项目.
我想创建一个非常严格的安全管理器,所以我扩展了SecurityManager并覆盖了所有自定义checkXXX方法.
但后来我发现我的安全经理没用,因为任何人都可以:
System.setSecurityManager(null);
Run Code Online (Sandbox Code Playgroud)
所以我必须补充:
@Override public void checkPermission(Permission perm) {
if (perm.getName().equals("setSecurityManager")) {
throw new SecurityException("You shall have no other security manager but me!");
}
}
Run Code Online (Sandbox Code Playgroud)
还有什么惊喜吗?我需要做的其他事情才能使我的SecurityManager密封?
我正在尝试通过URLClassLoader加载一个类(好吧,它既不适用于普通的类加载器),也希望它们没有任何权限.
因此,我创建了自己的安全管理器,它在启动时创建了一个密钥,只能通过请求一次(在主线程中).安全管理器有两个列表,即applicationThread,它们将被授予任何权限和temporaryList,它只被授予一次权限(它是关于反射).
由于很难描述,我决定上传整个内容:请看下面的链接
好的,回来:我创建了一个WatchDog线程,它检查线程是否不会占用太多时间.
当我现在开始从URLClassLoader实例化两个类时,我调用了30个方法而没有出现任何错误,但是在第31次调用时,它尝试检查以下的权限,但这只是在第30次调用之后感到满意.
java.lang.RuntimePermission accessClassInPackage.sun.reflect),
有谁知道那里发生了什么?
编辑:我有时间去除这个例子. http://myxcode.at/securitymanager.zip 我发现,SecurityManager不会被要求同步.只需运行这一小段代码,看看红线.
如果红线出现在第一行,只需再次运行程序,您会发现它似乎有点不受控制.
或多或少的问题是,我需要同步安全管理器.以下是那些无法面对错误的人的输出(bug?) http://pastebin.com/E9yLRLif
edit2:也许是关于控制台的?也许控制台太慢了?
我目前正在尝试使用java的安全机制,以了解如何在沙盒中最好地执行不受信任的代码.您要防范的一件事是无限循环,这就是为什么理想情况下您希望在自己的线程中运行不受信任的代码.当然,现在,恶意代码可能会做一些繁重的处理,导致挂起的线程.要摆脱这个线程本质上唯一的方法是使用java的弃用的Thread.stop()机制.这是有问题的主要原因是线程保持的所有锁都被释放,这可能导致对象损坏.
问题是:使用Java的SecurityManager和自定义类加载器,我能够跟踪,例如,可以加载哪些类以及可以访问哪些系统资源.有没有办法通知(并可能禁止)代码获取锁(例如,定义在当前线程进入同步块之前通知的回调).
我是SecurityManager的初学者.我一直在尝试使用Java SecurityManager来沙箱中一些不受信任的代码(应该是非常简单的代码,比如计算权重等).我使用该命令java -Djava.security.manager来运行该.class文件.
让我困惑的一件事是:有人说SecurityManager的默认策略几乎允许每个操作,你需要编写自己的策略来拒绝一些冒险行为(例如从磁盘读/写文件); 而其他一些人则说违约政策实际上否定了所有冒险行为,如果您需要允许一些冒险行动,您可以为该行动编写自己的政策.
我的问题是:
PS.我其实想要否认所有冒险行为.因此,如果默认策略是拒绝所有冒险行为,我想我会使用默认的SecurityManager.
我正在使用Apache Tomcat 7.当我使用安全管理器运行Tomcat并使用-Djava.security.debug参数时,我在控制台中获得了大量文本.我无法在控制台中阅读文本.所以我需要将控制台登录到某个文件中.我怎样才能做到这一点?
我想在 Wildfly 服务器上部署一个 Web 应用程序 (app.war)。Web 应用程序有自己的自定义安全管理器集,不允许更改 Java 安全策略。我能够成功部署 Web 应用程序。但是访问它时,它抛出以下异常。有没有办法在不更改应用程序代码的情况下解决问题
at CustomSecurityManager.checkPermission(CustomSecurityManager.java:131)
at javax.security.jacc.PolicyContext.setContextID(PolicyContext.java:206)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler$SetContextIDAction.run(JACCContextIdHandler.java:85)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler$SetContextIDAction.run(JACCContextIdHandler.java:74)
at org.wildfly.security.manager.WildFlySecurityManager.doUnchecked(WildFlySecurityManager.java:837)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.setContextID(JACCContextIdHandler.java:92)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:65)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 我在 Windows 10 上启动了我的 Tomcat 9.0:
-Djava.security.manager
-Djava.security.policy==C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\catalina.policy
-Djava.security.debug=access,failure
Run Code Online (Sandbox Code Playgroud)
使用 org.apache.coyote.http11.Http11Nio2Protocol 类型的连接器并启用 ssl。
此外,我只有(我自己的)ROOT 应用程序在运行,没有别的。
在 catalina.policy 中,我定义了(第一次测试):
grant codeBase "file:${catalina.base}/webapps/ROOT/-" {
permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)
当我现在检查 tomcat9-stderr.log 时,我发现了以下条目:
access: access denied ("java.util.PropertyPermission" "org.apache.juli.logging.UserDataHelper.CONFIG" "read")
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at org.apache.tomcat.util.log.UserDataHelper.<init>(UserDataHelper.java:57)
at org.apache.coyote.AbstractProcessor.<init>(AbstractProcessor.java:90)
at org.apache.coyote.http2.StreamProcessor.<init>(StreamProcessor.java:56)
at org.apache.coyote.http2.Http2UpgradeHandler.processStreamOnContainerThread(Http2UpgradeHandler.java:261)
at org.apache.coyote.http2.Http2UpgradeHandler.headersEnd(Http2UpgradeHandler.java:1356)
at org.apache.coyote.http2.Http2AsyncUpgradeHandler.headersEnd(Http2AsyncUpgradeHandler.java:37)
at org.apache.coyote.http2.Http2Parser.onHeadersComplete(Http2Parser.java:583)
at org.apache.coyote.http2.Http2Parser.readHeadersFrame(Http2Parser.java:272)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:167)
at org.apache.coyote.http2.Http2AsyncParser$FrameCompletionHandler.completed(Http2AsyncParser.java:85)
at …Run Code Online (Sandbox Code Playgroud) java ×10
securitymanager ×10
tomcat ×3
applet ×1
appletviewer ×1
classloader ×1
logging ×1
reflection ×1
sandbox ×1
security ×1
tomcat9 ×1
wildfly ×1