我已经开发了适用于Android / iOS的应用程序,该应用程序根据用户输入来计算值。如果发生事件,此计算值将作为常规HTTPS有效负载发送到我的后端。现在我的问题是,如何确定该值实际上仅由我的应用程序的源代码计算得出?有没有办法解决这样的问题?
明确地说:我想避免有人在扎根他的手机,从我的应用程序的私有存储中提取Auth-Token,并通过人工或通过操纵源代码将有效的HTTPS有效负载和虚拟负载发送到我的后端。
从后端的角度来看,很难根据有效负载的值评估有效负载(如果有效或无效)。
任何建议表示赞赏!
- - - - - 编辑 - - - - - -
为了完整起见:除了这里的答案之外,以下内容也非常有趣:
你不能信任来自客户端的数据。时期。
你应该考虑将计算逻辑移至服务器,并仅发送执行计算所需的原始值。你可以轻松获得亚秒级的响应时间,以将数据发送到服务器,因此用户不会注意到延迟。
如果需要离线连接,则需要在客户端和服务器上都复制业务逻辑。
但是原始值仍然可以妥协,因为鸡蛋就是鸡蛋,我不能相信来自客户端的数据,对吗?太糟糕了……值得进行一些源代码混淆或其他技术来保护静态密钥之类的东西吗?我已经在OWASP建议中阅读了有关它的内容,但似乎它更像是一个折衷的解决方案,不是吗?
这实际上取决于您的情况。如果您的用户输入要购买的商品数量,则仅将数量发送到服务器,然后让其计算总成本。我想不出您允许用户输入但需要信任它的情况,因为正如您所说,在设备上或传输过程中,有很多方法可以在它到达服务器之前对其进行操作。
该场景是一个游戏,我当然想尽可能减少作弊者的数量。因此,应确保这些值确实来自用户输入(而不是机器人程序),并且这些值是以我的方式而不是黑客的方式进行测量和计算的:D
谢谢你的澄清。在那种情况下,我会让用户使用OpenIdConnect / OAuth进行身份验证,并且该请求包含有效的访问令牌。对于机器人检测,您可以查看具有机器人检测功能的Web应用程序防火墙。
我必须感谢您的时间;)。“我会让用户使用OpenIdConnect / OAuth进行身份验证”-完成。“对于机器人检测,您可以看一下Web应用程序防火墙”-我想尝试一下ModSecurity,但是我无法想象这将如何检测到机器人。在我看来,很难区分。