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

Javascript 验证客户端应用程序标识-客户端位于浏览器中,javascript,php,ajax,security,Javascript,Php,Ajax,Security,我有用PHP编写的后端(实际上我想这并不重要)。 我用Javascript编写了客户端,它在浏览器中启动 应用程序的工作方式如下: 用户访问url地址并获取用于呈现数据的原始模板 通过ajax,GET查询被发送到后端服务器,查询数据以填充原始模板。响应作为有效的JSON返回 在这两个请求发生之后,我可以打开控制台并重新发送最后一个ajax查询。我可以复制所有参数并轻松地从JSON获取数据 我对这种情况感到不高兴。 我想通过应用程序找出查询的来源 我想到在后端生成某种一次性令牌。在步骤1中将其交给

我有用PHP编写的后端(实际上我想这并不重要)。 我用Javascript编写了客户端,它在浏览器中启动

应用程序的工作方式如下:

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

    我对这种情况感到不高兴。 我想通过应用程序找出查询的来源

    我想到在后端生成某种一次性令牌。在步骤1中将其交给客户。令牌只能使用一次。客户端在获得令牌后将立即使用它,因此使令牌在下一次查询中无用。令牌的生存时间很短,因为步骤2应该紧跟在步骤1之后

    所以,下一次如果将ajax查询发送到返回有关产品的基本信息的端点(步骤2),则不会返回任何数据作为响应

    我不想100%地保证查询没有被欺骗(我觉得这有点不可能,尽管我很高兴有这种可能性)。我在想办法让欺骗变得更难。拥有在80%的情况下工作的锁比根本没有锁要好,因为它需要断路器提供更好的资质

    我对我将要实施的方法的可行性有一些怀疑

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

    这样的问题肯定有人在我面前解决了。 你知道怎么做吗?有什么建议吗


    谢谢

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


    如果您有很多可以并行发送的请求,那么您可以存储一个nonce数组,并在获取它们时在服务器上使它们无效。您所说的是“nonce”,是一次使用的数字的缩写。您可以在第一次加载页面并将其添加到任何请求时在javascript中进行设置。您可以将其存储在服务器上的会话中,以便验证它是否与预期的相同。来自服务器的每个响应都需要包含一个新的nonce,并且在响应处理程序中,您需要更新脚本中的nonce集


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

    您可以应用移动应用程序中常用的解决方案:使用一些难以复制的签名对您的请求进行签名。将当前时间和随机值添加到请求中,并将salt添加到签名中。将签名放入HTTP头。混淆你的JS代码

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

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

    您可以应用移动应用程序中常用的解决方案:使用一些难以复制的签名对您的请求进行签名。将当前时间和随机值添加到请求中,并将salt添加到签名中。将签名放入HTTP头。混淆你的JS代码

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

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

    这么多的
    I
    I
    。。。我所能建议的就是你在整个过程中添加一个CSRF令牌,如果数据是敏感的,或者你不希望它被刮掉,那么让他们登录。对不起,我不是本地人。这是一种糟糕的措辞吗(你建议在哪里阅读好的措辞)?CSRF afaik用于表单保护…滚动CSRF令牌“样式”方法可用于“允许”基于上一个请求的后续请求,因此设置令牌加载内容,设置新令牌,在下一个请求中将其作为标头发送,依此类推。。如果刷新同一个请求,则令牌将出错..太多的
    I
    I
    。。。我所能建议的就是你在整个过程中添加一个CSRF令牌,如果数据是敏感的,或者你不希望它被刮掉,那么让他们登录。对不起,我不是本地人。这是一种糟糕的措辞吗(你建议在哪里阅读好的措辞)?CSRF afaik用于表单保护…滚动CSRF令牌“样式”方法可用于“允许”基于上一个请求的后续请求,因此设置令牌加载内容,设置新令牌,在下一个请求中将其作为标头发送,依此类推。。如果刷新相同的请求,则令牌将出错。。