我的后端用PHP编写(实际上我觉得没关系)。 我有用Javascript编写的客户端,它在浏览器中启动。
应用程序按以下方式工作:
发生这两个请求后,我可以打开控制台并重新发送最后一个ajax查询。我可以复制所有参数并轻松从JSON中获取数据。
我对这种情况不满意。 我想以某种方式找出该查询来自应用程序。
我想在后端生成一些一次性令牌。在步骤1给客户端。令牌只能使用一次。获取令牌后,客户端将立即使用它,因此令下一个查询无法使用令牌。代币的实时时间很短,因为第2步应该紧跟在第1步之后。
因此,下次如果将ajax查询发送到返回产品基本信息的端点(步骤2),则不会回复任何数据。
我不是在寻找100%保证查询没有被欺骗(我觉得这有点不可能,虽然我很乐意有这种可能性)。我寻找一些方法来让它更难欺骗。锁定在80%的情况下工作比完全没有锁定更好,因为它需要更好的断路器资格。
我对我要实施的方法的可行性有一些疑问。
我需要帮助链接人们通常如何做或一般的想法。实施对我来说不是问题。我能找到什么 是“证书固定”虽然不确定它在我的情况下如何帮助。
这个问题已经被某人肯定地解决了。 你知不知道怎么?有什么建议吗?
由于
答案 0 :(得分:1)
你所说的是一个" nonce"使用一次的数字的缩写。您可以在首次加载页面时将其设置为javascript并将其添加到任何请求中。您可以将它存储在服务器上的会话中,以便您可以验证它是否与您预期的相同。来自服务器的每个响应都需要包含一个新的随机数,并且在您的响应处理程序中,您需要更新脚本中设置的随机数。
如果您有许多可以并行发送的请求,您可以存储一组nonce并在服务器上使它们无效
答案 1 :(得分:1)
您可以应用移动应用程序中常用的解决方案:使用一些难以重现的签名来签署您的请求。将当前时间和随机值添加到请求中并向签名添加salt。将签名放到HTTP标头。模糊你的JS代码。
签名可能类似于md5("salt" + method + url + params + body + sessionId)
。
params
应包含您需要的其他参数中的当前时间和随机值。
在后端再次计算签名并拒绝没有有效签名的请求。