【问题标题】:How to verify that client (PHP web app) received correct response from the true API (Java)?如何验证客户端(PHP Web 应用程序)是否收到来自真实 API(Java)的正确响应?
【发布时间】:2021-02-18 08:06:36
【问题描述】:

我正在用 PHP 编写 Web 应用程序,它将(通过 curl)与 API (Java) 进行通信以用于许可目的。 Web 应用程序将使用 IonCube 进行加密。当然会使用 HTTPS。

我担心有人会以某种方式覆盖 curl 函数,然后阻止与 API 连接。出于这个原因,我想验证客户端(PHP Web 应用程序)是否收到了来自真正 API(Java)的响应。

我的想法:API 每天都会生成唯一的令牌,客户端会在连接期间对其进行验证。缺少或不正确的令牌将阻止 Web 应用程序。除了我,没有人不知道令牌是如何生成的。

你觉得我的想法怎么样?也许我应该以不同的方式来做这件事?

【问题讨论】:

  • “我担心...覆盖 curl ...”:如果您无法连接到 API 服务器,为什么不能默认为无效状态? “API 将生成唯一令牌……将由客户端验证……”:您打算怎么做?
  • 如果您打算将 PHP 源代码分发给人们,那么他们将能够更改他们想要的任何内容并可以模拟您的 API 调用(或者更确切地说,将它们一起绕过。)为了防止这种情况,您可能需要使用一些服务来帮助您加密源。
  • 通常主要关注点在 Java(服务器)端,担心恶意用户攻击。为什么需要在客户端验证令牌的真实性?
  • AlexBarker 有人可以覆盖 curl 以响应许可证永久有效,我错了吗? MagnusEriksson 代码将使用 IonCube 加密。
  • 我只是想检查一下客户端是否确实连接到了正确的 API,并且它没有被篡改。

标签: java php api ssl curl


【解决方案1】:

通常 DRM 很困难,就像 VEEERY 一样困难,就像最终不可能一样,每场比赛都会在某个时候被破解,并且 DRM 保护会被删除。例如。如果有人可以“覆盖 curl 函数”,他当然可以更改其中一个 php 文件以完全不调用 API,并删除任何依赖于已调用 API 的进一步检查。

删除 java 和 php 术语,而只使用“客户端”和“服务器”,您希望确保 客户端 具有有效的许可证以完全运行。你可以通过调用服务器来做到这一点。黄金法则之一是:永远不要相信客户。因为客户端总是可以被篡改的。

现在您可以考虑两种应用程序:在线应用程序和离线应用程序。在线应用程序需要服务器通信才能工作,例如在多人游戏中。
离线应用程序不需要服务器通信即可工作,而只需要进行身份验证。在离线应用程序环境中,您通常不走运,因为可以将客户端更改为不调用并且不关心许可检查。是的,你可以添加一些混淆代码的工具,或者用它做一些花哨的东西,但最终它仍然是代码,一些步骤是可逆的,结果是可变的。看。例如ioncube decryption in seconds :D
在在线应用程序环境中,您可以依赖完全正常的登录过程:在最基本的意义上,对于客户端想要与服务器进行的每次常规交互,都必须发送许可证令牌。如果令牌无效,服务器会以错误代码响应,故事结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2017-03-30
    • 2013-04-15
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多