当前位置: 首页 > 知识库问答 >
问题:

使用JNI是否可以避免jvm安全性?

赖鸿羲
2023-03-14

我一直在思考jvm安全的工作方式。原则是,jvm始终信任并运行任何本地代码。因此,从概念上讲,如果您的代码没有显式或隐式调用<code>checkpermission(permission)</code>,这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都是在JavaAPI类中完成的,因此我们不需要为内置权限调用它们。

现在,只要您使用内置类(如<code>FileOutputStream</code>),您的代码总是要接受权限检查。但思考了一会儿,我想知道使用Java Native Interface运行c代码是否可以避免安全检查。

想象一下,你导入了一些jar,而不是使用FileOutputStream写入文件,而是使用一些手工制作的JNI,它绑定到文件编写C程序(显然不会调用任何checkpermission())。基于问题“如何在JAR中捆绑原生库和JNI库?”,我了解到可以将所有内容捆绑在一个漂亮的恶意jar中。因此,使用此 jar 的任何代码都不再安全,因为在执行 jar 中的代码时不会发生安全验证。这意味着这个 c 程序可以有效地覆盖运行 jvm 的进程具有写权限的所有文件。

这是正确的思维方式,是有意为之还是我遗漏了什么?

共有1个答案

洪成济
2023-03-14

您认为本机代码不受JVM控制是正确的。如果Java安全管理器允许加载JNI库,则将其视为根本没有安全管理器。

这就是为什么,如果使用SecurityManager,重要的是不要授予< code>loadLibrary。*权限。

 类似资料:
  • Facebook React鼓励您将可变()和不可变()状态分开: 尽量让您的组件尽可能多的无状态。通过这样做,您可以将状态隔离到最符合逻辑的位置,并最大限度地减少冗余,从而更容易对应用程序进行推理。 当状态改变时,您应该调用来触发虚拟DOM diff,只有在需要时才会导致真正的DOM更新。 有一种方法可以通过调用手动触发DOM更新,但不鼓励: 通常情况下,您应该尽量避免使用,并且只从和中的读取。

  • 我有一个问题要问这里的JVM内部专家。 在Java虚拟机中,对象内容存储在堆内存中,直到被垃圾回收为止。通常,GC是在没有更多可用内存的情况下发生的,因此如果JVM有大量可用空间,那么GC发生之前可能需要很长时间。 从安全的角度来看,您能想象有人访问JVM内存并获得堆空间的转储,在那里可以找到等待GC的未使用对象吗? 我的意思是:如果我的程序处理敏感数据,并且在执行涉及这些敏感对象的过程后,我的应

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!

  • 问题内容: 如果我正在设计一个关于排序算法的测试,是否可以这样做以避免JVM预热?谢谢! 问题答案: JVM预热通常是指JVM查找代码的这些部分并将热点和JIT花费的时间。如果您运行实际测试几百次(我相信实际上是几千次),那么您应该相当不错。 但是,您应该知道,即使这样做,也无法保证。您必须对特定的JVM进行试验,以弄清关键部分被JIT之前必须要做的工作等等。 在这个小案例研究中,JIT编译在17

  • 问题内容: 使用createQuery()。list之后是否可以避免投射警告? 我希望找到一种通过通用参数或方法参数指定目标对象的方法,如下所示: 问题答案: 要记住的最重要的一点是, 警告是由于编译器引起的,而不是hibernate的 -您可以告诉编译器忽略未实现的泛型。通过使用HQL,我们以一种类型安全的方式查询数据,不幸的是,java无法进行验证。 有很多方法可以避开hibernate转换的

  • 我正在接管一些在PHP中使用eval()函数的webgame代码。我知道这可能是一个严重的安全问题,所以在决定是否取消这部分代码之前,我希望得到一些帮助来检查代码的参数。目前我已经从游戏中删除了这部分代码,直到我确定它是安全的,但功能的损失是不理想的。我宁愿对此进行安全保护,而不是重新设计整个段以避免使用eval(),假设这样的事情是可能的。下面是防止恶意代码注入的相关代码片段。$value是一个