确保Java代理的安全

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确保Java代理的安全相关的知识,希望对你有一定的参考价值。

我目前正在处理一个遗留的应用程序,其中数据库调用有点分散。我需要在每次执行某种DML时执行一些与安全(业务)相关的逻辑,为此,我想使用一个java代理并拦截调用,然后执行业务逻辑。问题是这个代理需要是安全的,我需要确保没有办法加载一个类似但不同逻辑的不同代理。

答案

在应用程序和java代理之间是否有任何形式的相互认证,以确保错误的代理无法被加载。

没有。应用程序几乎不知道代理的情况。 当然,应用程序也没有办法正确地验证代理。

我想,你可以设计一个 "协议",只有当代理以特定的方式调用特定的应用方法时,应用程序才会工作。 然而,这可以通过对应用程序或真实的代理进行逆向工程来规避,并使用这些知识来编写一个模仿所需行为的坏代理。


但我认为,你的做法是错误的。 有许多更好的(更简单、更干净、更有效的)方法可以将行为注入到Java应用程序中。 而且我想我可以检测到你的部分动机是你想尽可能少地修改遗留应用程序。 而这也是你复杂的基于代理的方法的主要动机。

(我的反应是,你很可能在代理上花费更多的精力,而不是通过不修改遗留应用程序来节省。 而且结果会更难维护。)

我还怀疑,你对应用程序和拦截器(无论它们是如何实现的)的相互认证的要求并不是真正必要的。 是使用代理的结果,而不是基本要求。

如果我在做这件事,而且我如此关心如何防止(内部人员)试图颠覆业务规则的行为,我会。

  1. 选择一个替代机制
  2. 按要求实现新代码和对原有应用的修改。
  3. 审核主应用程序和拦截器逻辑
  4. 将两个部件连接在一起(根据机构的工作方式)。
  5. 把组合系统放到一个安全的机器或容器上。
另一答案

Java attach API已经是安全的方式,代理必须要么。

  • 在命令行中指定
  • 从同一个操作系统用户运行的JVM上附加。

要建立这两种情况,你必须拥有的权限已经可以升级到超出JVM进程内运行的代理的权限。基于这些原因,应该没有必要从JVM内部验证你的代理。

理论上,你可以编写一个对仪器化API进行仪器化的Java代理,并确保这个代理首先被连接。然后,仪器化API的仪器化可以在附加代理之前检查附加代理的jar文件,并将其与一些已知的种子进行比较,例如。如果这个种子不匹配,你可能会导致代理的初始化失败。

以上是关于确保Java代理的安全的主要内容,如果未能解决你的问题,请参考以下文章

3-java安全基础——jdk动态代理

Java 代理模式

java代理模式

Day315.代理模式 -Java设计模式

linux代理不能代理项目网络

Java学习之动态代理