java - 限制来自 Java 的 native 代码功能

标签 java c security java-native-interface sandbox

我有一个 java 应用程序,它在某些部分使用 JNI 来完成一些工作。它遵循通常的 DLL 加载,然后调用 DLL 的本地方法。有什么方法可以限制 native 方法可以从 Java 应用程序做什么?例如,我们是否可以限制 DLL 不打开任何文件或不打开任何套接字,即使它有代码可以这样做?它可以禁止它加载的 DLL 来做某些事情,可能是通过登录某些东西或抛出异常。

最佳答案

不,你不能。 DLL 作为一个整体加载,然后 Java 端无法控制 native 代码正在做什么。

一种解决方案可能是中间人方法。这将涉及编写一个与原始 DLL 具有相同接口(interface)的“外壳”DLL。例如,您通过将“外壳”DLL 放在特定位置并使用 java.library.path 属性来告诉 Java 加载“外壳”DLL。然后“外壳”DLL 的作用是通过将其沙盒化并重定向标准函数来加载“真正的”DLL。这听起来很痛苦,而且这会发生在原生端,而不是 Java。

关于java - 限制来自 Java 的 native 代码功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057164/

相关文章:

c - 是否可以替换 double 并仅使用 C 中的整数编写程序,并具有相同的输出?

c - C 变量的内存地址

windows - 检测用户何时截取我的程序的屏幕截图

c - 从输入文件中读取数据并放入数组的函数

security - 用于 Google App Engine 的 JDO : escaping quotes

android - 如何设置 BroadcastReceiver 权限(安全)

java - 在 java 11 http 客户端上运行 powermock + mockito

java - 从 servlet 访问 WebContent 文件夹中的文件

java - 使用流 API 搜索列表中的值并保持搜索位置(标准化测量数据)

java - Java中的switch语句可以使用 "view"作为参数吗?