为什么codeforces、leetcode等OnlineJudge不允许java提交自建classloader?
Why does OnlineJudge, such as codeforces and leetcode, not allow java submit to self built classloader?
例如,当
new classloader() {};
Java.security.accesscontrolexception 会被抛出。 OJ 允许提交者构建自己的类加载器是否存在任何风险?函数 defineclass() 有其他替代方法吗?
安全策略与代码位置相关联。由于 ClassLoader
可以为其定义的 类 指定代码位置,因此它可以规避应用于其自身代码位置的限制。
当您使用 MethodHandles.lookup().defineClass(…)
you can only create classes within your own context, hence, not use it to expand your privileges. Therefore, you can use it even when a security manager is installed, as long as your lookup object has the necessary full privileges.
因此,当我 运行 JDK 14 或更高版本
下的 示例时
-Djava.security.manager
选项,它 运行 无需任何权限即可顺利进行。
所以当提到在线执行环境运行在JDK 14或更新版本时,您可以使用此方法进行动态代码生成。
例如,当
new classloader() {};
Java.security.accesscontrolexception 会被抛出。 OJ 允许提交者构建自己的类加载器是否存在任何风险?函数 defineclass() 有其他替代方法吗?
安全策略与代码位置相关联。由于 ClassLoader
可以为其定义的 类 指定代码位置,因此它可以规避应用于其自身代码位置的限制。
当您使用 MethodHandles.lookup().defineClass(…)
you can only create classes within your own context, hence, not use it to expand your privileges. Therefore, you can use it even when a security manager is installed, as long as your lookup object has the necessary full privileges.
因此,当我 运行 JDK 14 或更高版本
下的 -Djava.security.manager
选项,它 运行 无需任何权限即可顺利进行。
所以当提到在线执行环境运行在JDK 14或更新版本时,您可以使用此方法进行动态代码生成。