java - 用RMI编写安全的Java代码

这似乎是一个非常宽泛的问题,但任何帮助都是值得赞赏的。
我有一个用java编写的客户机/服务器解决方案,它使用cajo项目(它使用rmi)。我只想尝试使我的解决方案尽可能安全,考虑到敏感数据将在服务器和客户端之间传输。
到目前为止,我的想法是使我的所有类成为“最终”类,并对服务器中的所有类抛出“不可序列化”异常(除了在rmi注册表中绑定的对象,以及实际上需要传输的任何对象)。
有人能想出别的主意吗?
我知道有人可能会编写恶意客户端-这并不难,因为您可以使用反射来查找远程对象的api。但是,我是否可以做些什么来保护服务器中不应访问的恶意客户端访问类/对象?
非常感谢
更新:
谢谢大家的建议,很抱歉这么久才给你们回复。我现在的思路是建立一个安全的系统:
在客户端和服务器之间使用openvpn。这意味着您需要访问物理客户机才能获得访问权限。(注意:由于下面两点,VPN实际上将位于服务器和办公局域网之间。我觉得这很安全)
在服务器和客户端之间使用用户名和密码(可能使用jboss)进行身份验证。这意味着要在服务器上执行任何操作,攻击者都需要用户名和密码。
对所有对象抛出“非可序列化”异常,但实际应该通过网络发送的对象除外。这将阻止敏感对象通过网络发送。
听起来公平吗?如果我遗漏了什么,请纠正我。
进一步的更新:似乎有一些困惑,我试图防止什么。我试图阻止的是有人“入侵”服务器。例如,基本上是利用服务器来转储/删除整个数据库。
谢谢

最佳答案

通过rmi保护与潜在受损系统连接的系统非常困难。首先要做的是使用java.rmi.server.useCodebaseOnly系统属性禁用rmi的动态代码加载功能-不再使用移动代码(通过此通道)。正如rmi man stuart marks所指出的,这个属性在默认情况下是安全的,符合oracle策略。

本文翻译自 https://stackoverflow.com/questions/2869771/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java security rmi cajo


相关文章:

java - 从动态参数创建字符串数组和字符串变量

java - 如何多次水平打印二维数组

java - 适用于Linux和RandomSource的Oracle Java 8 x64

java - 如何为新的java安全屏障编写清单文件

java - 通过RMI的服务器,无需注册表

java - 是否有诸如Java的原理图(Python)之类的工具?

windows - Windows程序文件夹中可全局写入的批处理文件的安全性问题

java - 在Eclipse中运行客户端时出现问题

java - 设置简单的RMI服务器时出现问题

java - 在键入右大括号时禁用Intellij IDEA代码重新格式化