有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从服务器验证客户端代码未被修改

我有一个java服务器,它通过json rpc与java客户机通信。客户端应该向服务器报告内部统计信息,从而修改服务器的行为。客户端和服务器组件都是在内部编写的,所以我可以控制客户端做什么以及它如何报告统计数据,但有没有办法验证客户端代码没有被修改?如果有,它仍然会为客户服务,但会使用一些默认行为

这些客户端将是公开的,所以对某些人来说,反编译它们并改变行为并不是什么大不了的事

简单地让客户机发送代码签名是不好的,因为将客户机的原始副本与修改后的副本放在一起很容易被欺骗


共 (2) 个答案

  1. # 1 楼答案

    你不能。你基本上无法知道客户机上运行的是什么代码,你的程序逻辑也不应该依赖于将客户机视为“受信任的”。所有的访问控制、验证等都应该在服务器上完成(或在两个位置都进行)

    某些专业环境(例如,嵌入在智能卡上的代码,或像游戏机这样的设备,其操作系统设计为只运行签名代码)为您提供了更多的保障,因为逆向工程/获得对设备的适当控制越来越困难。但即使是这些也不是绝对正确的(看看iPhone或任何控制台,看看这些设备被“破解”所花的时间,与人们对破解的兴趣相比,需要多长时间才能让你了解安全级别)

  2. # 2 楼答案

    无法验证客户端是否未使用客户端-服务器体系结构进行修改

    除非经过身份验证的用户(登录+密码匹配)通过安全连接(如SSL)与您交谈,否则您永远不应该信任来自客户端的输入

    客户端只需调用逻辑,而不是将其发送到服务器