Tag: securitymanager

如何自动将数据复制到新的RMI线程?

我正在调整一个小的rmi客户端 – 服务器应用程序。 我写过几件事: HelloInterface -> A Hello World interface for RMI Server -> The server app’ Client -> The client app’ 没什么特别的,但是……我已经把手放在一个新的RMISecurityManager中,它调用一个JNI方法并检查一个单独用户的权限: package rmi; import java.rmi.RMISecurityManager; import java.io.*; public class NativeRMISecurityManager extends RMISecurityManager { private boolean unix; protected static ThreadLocal user = new ThreadLocal(); /* * On interdit l’utilisation du constructeur par defaut * […]

除了对System.exit进行单个检查调整之外,与NO安全管理器相同的java SecurityManager

我不熟悉java安全管理器,因此想确认我的理解: 我有一个java进程随机停止(关闭钩子运行),即使没有人杀死它的痕迹。 因此,我决定安装一个安全管理器并覆盖checkExit(int status)以确保stop的原因不是调用System.exit() 。 基本上我写了这个: System.setSecurityManager(new SecurityManager() { @Override public void checkExit(int status) { Thread.dumpStack(); super.checkExit(status); } }); 我期待我的程序将像往常一样运行,唯一的变化是如果调用System.exit()则会转储堆栈跟踪。 我发现事实并非如此。 它无法从此安全exception开始: java.security.AccessControlException: access denied (“java.util.PropertyPermission” “config” “read”) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) ~[na:1.8.0_74] at java.security.AccessController.checkPermission(AccessController.java:884) ~[na:1.8.0_74] at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[na:1.8.0_74] at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294) ~[na:1.8.0_74] at java.lang.System.getProperty(System.java:717) ~[na:1.8.0_74] at Main.main(Main.java:161) ~[na:na] 似乎SecurityManager不会复制默认行为,在阅读之后,它似乎应用了${JAVA_HOME}/jre/lib/security/java.policy下的默认策略,这是非常严格的。 没有安全管理器时,Java的真正默认行为是什么? 它是“允许一切”还是还有其他事情发生? 除了上面的单一调整之外,如果我想复制默认行为,我应该作为安全管理器安装什么? 在最后一点,我可以看到System.setSecurityManager()实际上需要一个java.lang.SecurityManager实例,这意味着我被迫使用该实现(依赖于策略文件)。 在该类中重写方法以复制NO安全管理器的实际默认行为的最有效方法是什么? 编辑:根据下面的讨论,这似乎做到了 System.setSecurityManager(new SecurityManager() […]

如何对预期在applet安全管理器中运行的Java代码进行unit testing

我有一些Java库代码,有时作为未签名的applet运行。 因此,并不总是允许执行某些操作(例如检查系统属性)。 我想使用类似Applet的安全管理器运行一些unit testing,以便我可以validation代码是执行任何受限操作,还是正确处理任何安全exception。 使用真实的Security-Manager配置运行这些unit testing的最佳方法是什么? 优选的解决方案是可以与JUnit集成的东西。

如何在Applet中模拟模式对话框?

在setVisible(true)上,我调用以下代码来启动模式对话框: private synchronized void startModal () { try { if (SwingUtilities.isEventDispatchThread()) { EventQueue theQueue = getToolkit().getSystemEventQueue(); while (isVisible()) { AWTEvent event = theQueue.getNextEvent(); Object source = event.getSource(); if (event instanceof ActiveEvent) { ((ActiveEvent) event).dispatch(); } else if (source instanceof Component) { ((Component) source).dispatchEvent(event); } else if (source instanceof MenuComponent) { ((MenuComponent) source).dispatchEvent(event); } else { […]

我应该在Java Web应用程序中使用Security Manager吗?

是否足以使用运行应用程序服务器进程的用户的权限来保护Java Web应用程序,或者将SecurityManager与合适的策略文件一起使用是否合理? 我曾经做过前者,而不是后者,但有些客户希望我们也使用SecurityManager,它会明确地为每个第三方组件授予权限,以确保没有任何恶意代码潜伏在那里。 我已经看到一些Servlet容器,比如Resin ,建议不要使用SecurityManager来减慢速度。 有什么想法吗?

来自并行流中的I / O代码的SecurityException

我无法解释这一点,但我在其他人的代码中发现了这种现象: import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; import java.util.stream.Stream; import org.junit.Test; public class TestDidWeBreakJavaAgain { @Test public void testIoInSerialStream() { doTest(false); } @Test public void testIoInParallelStream() { doTest(true); } private void doTest(boolean parallel) { Stream stream = Stream.of(“1”, “2”, “3”); if (parallel) { stream = stream.parallel(); } stream.forEach(name -> { try { Files.createTempFile(name, “.dat”); } […]

在没有默认java.policy文件的情况下运行Java Security Manager

我不想修改我的java主目录中的任何内容,但是,我担心有时我的默认java.policy文件可能过于宽松。 当我使用-Djava.security.manager选项运行java时,有没有办法让我使用指定的策略文件作为唯一的策略文件? 如果我添加-Djava.security.policy=myPolicy.policy选项,除了默认策略文件之外,它-Djava.security.policy=myPolicy.policy使用我的策略文件 – 这很糟糕,因为它看起来仍然授予默认策略文件中授予的所有权限。

Java安全管理器 – 它检查什么?

这篇关于Java安全性的文章说: 只要尝试执行危险操作,Java库中的代码就会查询安全管理器。 那么,这究竟意味着什么? 比如说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。 现在,java运行库是否为每个java调用(如System.out.println()等)查询我的安全管理器,或者它只参考像System.exit(),文件操作等dangerous api调用? 编辑 :让我澄清一下我的问题, 我不是在质疑安全管理员的可能性。 我只是询问是否单独为危险的api进行了安全检查,或者是为每个方法调用完成了安全检查。 在具有大量代码的应用程序中,哪种情况会导致性能大幅下降。

Tomcat控制台登录到文件

我正在使用Apache Tomcat 7 。 当我使用安全管理器运行Tomcat并使用-Djava.security.debug参数时,我在控制台中获得了大量文本。 我无法在控制台中阅读文本。 所以我需要将控制台登录到某个文件中 。 我怎样才能做到这一点?

安全性:限制第三方软件的内部访问

我有一个Java应用程序,用户可以在其中加载第三方“插件”以增强用户体验。 存在供这些插件使用的API,但出于安全考虑,应限制第三方软件访问内部应用程序类。 插件的受限制包将是“com.example”,而允许的是“com.example.api”。 API类确实调用内部的混淆类。 在研究了这个之后,我遇到了几种SecurityManager方法: checkMemberAccess(Class,int)和checkPackageAccess (String) ,它们似乎都是我可行的目标。 但是,经过一些测试和进一步研究后,我发现checkMemberAccess仅适用于reflection调用,而checkPackageAccess仅在类加载器调用loadClass时调用。 限制对包的访问的合理方法是什么(com.example,而不是com.example.api)?