验证客户端应用程序标识 - 客户端位于浏览器中

时间:2017-11-27 07:09:35

标签: javascript php ajax security

我的后端用PHP编写(实际上我觉得没关系)。 我有用Javascript编写的客户端,它在浏览器中启动。

应用程序按以下方式工作:

  1. 用户访问网址并获取用于呈现数据的原始模板
  2. 通过ajax,GET查询被发送到后端服务器,查询填充原始模板的数据。响应将作为有效的JSON返回。
  3. 发生这两个请求后,我可以打开控制台并重新发送最后一个ajax查询。我可以复制所有参数并轻松从JSON中获取数据。

    我对这种情况不满意。 我想以某种方式找出该查询来自应用程序。

    我想在后端生成一些一次性令牌。在步骤1给客户端。令牌只能使用一次。获取令牌后,客户端将立即使用它,因此令下一个查询无法使用令牌。代币的实时时间很短,因为第2步应该紧跟在第1步之后。

    因此,下次如果将ajax查询发送到返回产品基本信息的端点(步骤2),则不会回复任何数据。

    我不是在寻找100%保证查询没有被欺骗(我觉得这有点不可能,虽然我很乐意有这种可能性)。我寻找一些方法来让它更难欺骗。锁定在80%的情况下工作比完全没有锁定更好,因为它需要更好的断路器资格。

    我对我要实施的方法的可行性有一些疑问。

    我需要帮助链接人们通常如何做或一般的想法。实施对我来说不是问题。我能找到什么  是“证书固定”虽然不确定它在我的情况下如何帮助。

    这个问题已经被某人肯定地解决了。 你知不知道怎么?有什么建议吗?

    由于

2 个答案:

答案 0 :(得分:1)

你所说的是一个" nonce"使用一次的数字的缩写。您可以在首次加载页面时将其设置为javascript并将其添加到任何请求中。您可以将它存储在服务器上的会话中,以便您可以验证它是否与您预期的相同。来自服务器的每个响应都需要包含一个新的随机数,并且在您的响应处理程序中,您需要更新脚本中设置的随机数。

如果您有许多可以并行发送的请求,您可以存储一组nonce并在服务器上使它们无效

答案 1 :(得分:1)

您可以应用移动应用程序中常用的解决方案:使用一些难以重现的签名来签署您的请求。将当前时间和随机值添加到请求中并向签名添加salt。将签名放到HTTP标头。模糊你的JS代码。

签名可能类似于md5("salt" + method + url + params + body + sessionId)

params应包含您需要的其他参数中的当前时间和随机值。 在后端再次计算签名并拒绝没有有效签名的请求。