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

原文 标签 java security rmi cajo

这似乎是一个非常广泛的问题,但是可以提供任何帮助。

我有一个使用Cajo项目(使用RMI)用Java编写的客户端/服务器解决方案。考虑到将在服务器和客户端之间传输的敏感数据,我只想尝试使我的解决方案尽可能安全。

到目前为止,我的想法是使我所有的类都成为“最终”类,并对服务器中所有我的类抛出“不可序列化”的异常(RMI注册表中绑定的对象以及实际需要的任何对象除外)当然要转移)。

谁能想到其他想法?

我知道有人可以编写一个恶意客户端-这并不难,因为您可以使用反射来查找远程对象的API。但是,我有什么办法可以保护恶意客户端访问不应在服务器中访问的类/对象?

非常感谢

更新:
感谢大家提供有用的提示,很抱歉花了这么长时间回复您。我目前的思路是为了建立一个安全的系统:

  • 在客户端和服务器之间使用OpenVPN。这意味着您需要访问物理客户端才能获得访问权限。 (注:由于以下两点,VPN实际上将位于服务器和办公室LAN之间。我认为这已经足够安全了)
  • 使用用户名和密码(也许使用JBOSS)在服务器和客户端之间进行身份验证。这意味着对于要在服务器上完成的所有操作,攻击者都需要用户名和密码。
  • 对所有对象抛出“非可序列化”异常,但实际上应该通过网络发送的对象除外。这样可以阻止敏感对象通过网络发送。

  • 听起来合理吗?如果我有任何遗漏,请纠正我。

    进一步更新:对于我要阻止的操作似乎有些困惑。我试图防止的是有人“入侵”服务器。因此,例如,基本上利用服务器来转储/删除其整个数据库。

    谢谢

    最佳答案

    保护通过RMI与可能受到威胁的系统连接的系统非常困难。首先要做的是使用java.rmi.server.useCodebaseOnly系统属性禁用RMI的动态代码加载功能-不再有移动代码(通过此通道)。正如RMI管理员Stuart Marks指出的那样,此属性默认情况下是安全的,符合Oracle策略。

    相关文章:

    java - 从文本区域获取二进制文件,然后转换为十六进制

    java - 使用JPA / Hibernate搜索集合

    node.js - mosca MQTT代理的安全密钥和证书

    java - scala / Serializable NoClassDefFoundError(RMI w / Scala)

    java - 使用Java RMI的优缺点

    java - Google喜欢在Wicket中进行分页

    java - Android V7 ShareActionProvider共享按钮不起作用

    http - 有没有防止cookie在另一台计算机上使用的方法?

    c - 格式化字符串攻击,%_ $ d和%d之间的区别

    java - 编年史队列可以像RMI一样使用吗?