我们目前使用LD_PRELOAD来启用信号链。 我们之所以选择LD_PRELOAD,是因为我们不会强迫客户使用特定的 Java 供应商或版本,也不想通过为客户可能使用的各种 Java 供应商/版本中的每个版本创建唯一的构建来使我们的构建过程复杂化。 我们最近发现,使用LD_PRELOAD被安全分析工具(例如检查OWASP 2017的工具(视为代码注入风险。
我们是否可能没有考虑允许我们的JNI依赖产品符合OWASP标准?或者有谁知道将来是否有计划以新的或替代方式解决这个问题,以允许 JNI 应用程序符合 OWASP 标准? 针对每个受支持的 JVM 链接的构建是可行的,但是在 5 个平台上从 1 到 9 个构建(大约 3 个 JDK 供应商 x 3 个活动的 JDK 版本级别(肯定会增加我们的维护和测试周期。
基于对 OpenJDK 社区的建议,我们更新了 API 的 Java 部分以执行
System.loadlibrary("jsig"(;
在调用加载我们的 JNI 库之前。 这在测试时给出了预期的效果;本机代码处理了信号,Java 程序成功完成。 这适用于所有涉及的JDK和平台。