gpt4 book ai didi

java - 有没有办法在 Java 中执行不安全代码(禁用安全管理器)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:32 25 4
gpt4 key购买 nike

请不要发布“你不应该这样做”的回答。我不打算在生产代码中使用它,只是为了一些黑客乐趣。

在回答this question ,我想为了好玩而运行一些任意的不安全的 Java 代码。有问题的代码只涉及查找 Java TreeMap节点。

运行下面的代码结果

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util

根据 this question ,我可以使用 System.setSecurityManager(null) 来绕过这些限制中的大部分。但是我不能这样做,因为在加载我的类时会弹出错误。

我已经意识到在禁用安全管理器后我可以使用反射做任何我想做的事情。但这会使代码更难看。 核心 Java 开发人员如何编写他们的单元测试,例如,如果他们不能在 java.util 中打包东西?

我也试过 -Djava.security.manager=... 但是当我将它设置为 null 时会导致 JVM 初始化错误,我不确定还有什么我可以设置它。有什么想法吗?

package java.util;

import java.util.TreeMap.Entry;

public class TreeMapHax {

static <K,V> List<Entry<K, V>> getLeafEntries(TreeMap<K, V> map) {
Entry<K, V> root = map.getFirstEntry();
while( root.parent != null ) root = root.parent;

List<Entry<K,V>> l = new LinkedList<Entry<K,V>>();
visitInOrderLeaves(root, l);
return l;
}

static <K,V> void visitInOrderLeaves(Entry<K, V> node, List<Entry<K, V>> accum) {
if( node.left != null ) visitInOrderLeaves(node.left, accum);
if( node.left == null && node.right == null ) accum.add(node);
if( node.right != null ) visitInOrderLeaves(node.right, accum);
}

public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<String, Integer>();

for( int i = 0; i < 10; i++ )
map.put(Integer.toString(i), i);

System.out.println(getLeafEntries(map));
}

}

最佳答案

简单回答你的问题,没有通常的方法

java.* 中的类不受安全管理器限制,它们受类加载器的限制。

要做你想做的事,你需要找到一种破解 jvm 的方法。或者只是按照你提到的去做,反射(reflection)一下。或者只是在您自己的包中创建 TreeMap 的副本(源代码克隆)。

关于java - 有没有办法在 Java 中执行不安全代码(禁用安全管理器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com