繁体   English   中英

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

[英]How to verify from server that client code hasn't been modified

我有一个 java 服务器,它通过 json-rpc 与 java 客户端通信。 客户端应该向修改服务器行为的服务器报告内部统计信息。 客户端和服务器组件都是在内部编写的,因此我可以控制客户端的操作以及它如何报告统计信息,但是有没有一种方法可以验证客户端代码没有被修改? 如果有,它仍然会为客户端提供服务,但会使用一些默认行为。

客户将是公开的,因此对某人来说反编译并改变行为并不是什么大不了的事。

简单地让客户端发送代码的签名是没有好处的,因为很容易通过将客户端的原始副本与修改后的副本一起保存来进行欺骗。

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

某些专业环境(例如嵌入在智能卡上的代码,或操作系统设计为仅运行签名代码的游戏机等设备)为您提供更多保证,因为逆向工程/获得适当控制的难度增加设备。 但即使这些也不是万无一失的(看看 iPhone 或任何控制台,看看设备被“破解”需要多长时间,与这样做的兴趣相比,让您了解安全级别)。

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

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

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

首先想到的是客户端发送签名文件(在代码内)和 hash 本身。

但是,就像你说的,它可以被欺骗。

如果您试图依靠客户端的真实性在服务器上执行操作:不要! 重新思考你的逻辑。 如果这只是一个额外的安全措施(去吧)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM