jjzjj

SecurityManager

全部标签

java - Java 中的 SecurityManager 有没有办法选择性地授予 ReflectPermission ("suppressAccessChecks")?

Java中的SecurityManager是否有任何方法可以根据调用setAccessible()的详细信息选择性地授予ReflectPermission("suppressAccessChecks")?我看不出有什么办法可以做到这一点。对于某些沙盒代码,允许调用setAccessible()反射API将非常有用(例如用于运行各种动态JVM语言),但仅在调用setAccessible()时在源自沙盒代码的类的方法/字段上。如果这不可能,除了选择性授予ReflectPermission("suppressAccessChecks")之外,还有其他建议吗?如果SecurityManager

java - 安全管理器 checkMemberAccess() 的替换

Java安全管理器方法checkMemberAccess()有一个参数包含调用反射的类。此方法已弃用,描述中说使用checkPermission()代替。checkPermission()中没有与checkMemberAccess()中的参数类似的参数。在安全管理器中,如何在没有checkMemberAccess()的情况下获取反射目标类方法?即如果A类对B类进行反射,我想知道目标是B类。 最佳答案 当您安装默认安全管理器时-应用程序会使用默认安全策略。如果你想提供我们自己的政策,你可以在政策文件中写成:grant{permissi

java - 反射安全

如何通过不允许Method来加强反射安全,Field,Constructor对象调用setAccessible(true)?SecurityPolicy文件还是其他?通常对于独立的Java应用程序没有SecurityManager已注册。我用这个System.setSecurityManager(newSecurityManager());这种方法适用于调用方法。我想强制执行整个jar或使用该jar的客户端代码不允许调用setAccessible(true);有什么更好的方法吗?谢谢。 最佳答案 嗯,它确实适用于setAccessi

java - 沙盒 JVM 以保护服务器免受不受信任的来源

在接受和执行上传的不受信任的代码时,如何保护我的服务器免受恶意Activity的侵害?用户应该能够实现我的接口(interface)和给定的数据,执行一些计算并返回数据。不需要I/O操作,当然也不需要线程/进程操作或其他愚蠢行为。使用java.policy文件可以拒绝所有内容(通过不授予任何内容)。$cattest.policygrant{};使用此策略文件,未授权的操作将导致安全异常。$catPrint.javapublicclassPrint{publicstaticvoidmain(Stringa[])throwsException{System.out.println(Syst

java - 如何检查 SecurityManager 中的调用者类来源?

我有一个用于受信任应用程序代码的ClassLoader和一个用于用户提交(不受信任)代码的单独ClassLoader。我希望安全管理器限制用户提交的代码。如何从SecurityManager中检查调用方来源?查看伪代码:System.setSecurityManager(newSecurityManager(){publicvoidcheckPermission(Permissionpermission){if(/*callerclassisnotloadedbythetrustedclassloader*/){thrownewSecurityException("Youdonotha

Java 安全管理器完全禁用反射

我已经在Stackoverflow上阅读了很多关于这个问题的问题,但无法停止为我的问题找到解决方案或答案。如果已经有一个,如果有人能给出提示,我将不胜感激......我的问题/问题是是否可以完全禁用不可信代码的反射?类似getDeclaredMethods()的函数(参见test.java)。我已经有了一个Java安全管理器,如果代码尝试写入/读取/等,它会抛出安全异常。...如果可能的话,有人可以告诉我怎么做吗?布鲁诺测试.javaTestClasscls=newTestClass();Classc=cls.getClass();//returnsthearrayofMethodob

Java 沙箱。使用 SecurityManager 重定向 I/O 访问

目前我正在尝试编写用于运行不受信任的Java代码的沙箱。这个想法是将Java应用程序与访问文件系统或网络套接字隔离开来。我目前的解决方案是重写SecurityManager,它禁止对IO或网络的任何访问。现在我不想禁止,而是要重定向对文件系统的调用,即如果应用程序想要写入"/home/user/application.txt",文件的路径应该是替换为类似"/temp/trusted_folder/application.txt"的内容。所以基本上我想让应用程序只访问某个特定文件夹中的文件系统,并将所有其他调用重定向到该文件夹​​。所以这里是FileOutputStream类的方法,其中

java - 使用 SecurityManager 的性能损失是多少(如果有的话)

使用SecurityManager时是否会降低性能?我需要以下内容:publicclassExitHelper{publicExitHelper(){System.setSecurityManager(newExitMonitorSecurityManager());}privatestaticclassExitMonitorSecurityManagerextendsSecurityManager{@OverridepublicvoidcheckPermission(Permissionperm){}@OverridepublicvoidcheckPermission(Permiss

java - 并行流中 I/O 代码的 SecurityException

这个我没办法解释,但是我在别人的代码中发现了这个现象:importjava.io.IOException;importjava.io.UncheckedIOException;importjava.nio.file.Files;importjava.util.stream.Stream;importorg.junit.Test;publicclassTestDidWeBreakJavaAgain{@TestpublicvoidtestIoInSerialStream(){doTest(false);}@TestpublicvoidtestIoInParallelStream(){doT

java - 为什么我的自定义 SecurityManager 在第 16 次使用 Constructor.newInstance 创建对象时会导致异常?

我目前正在开发一个小型Java应用程序,其中受信任的代码必须与不受信任的代码一起运行。为此,我安装了一个自定义的SecurityManager,它会在检查权限时抛出SecurityException。作为可信代码和不可信代码之间的桥梁,我有一个线程使用Constructor.newInstance()来实例化一个不可信类型的对象。在进行此调用时,安全管理器配置为阻止所有内容。有趣的是,前15次我尝试使用Constructor.newInstance()创建对象时,一切正常,但第16次我遇到了SecurityException。我已经设法将其归结为一个简单的测试程序:importjava