如何保护HTTP POST请求不被批准的javascript客户端接收?

时间:2019-05-06 10:59:43

标签: javascript http security authentication analytics

我有一个URL,它将接受POST数据并存储它的记录-用于分析。我需要确保从POST到世界上的任何人都可以免受攻击,但是我可以使用哪种可能的身份验证机制来安全地公开其详细信息?我认为JavaScript无法在不公开的情况下访问任何秘密数据。

我可以将其基于任何HTTP标头,但是这些都可以被欺骗,对吗?

如果有帮助,则客户端和服务器均为https。

编辑:我认为我需要更明确地陈述问题;对不起,我以为我可以简明扼要地解释它,但显然没有发现!想象一下:

  1. https://example.com/index.html上的静态页面包含脚本https://example.com/script.js

  2. 该脚本向另一个远程URL发出请求,例如

    ajax_call('https://stats.example.com/stats.php', 'some data');
    
  3. stats.php脚本仅将'some data'写入文件

现在,缺点是任何人都可以将任何内容简单地发布到stats.php并将其写入文件。我只想将其限制为我的“客户”,即https://example.com/index.html

如果可以的话,我会在stats.php中这样做:

if ($_SERVER["HTTP_REFERER"] == 'https://example.com') {
    do_stuff();
} else {
    die('not allowed');
}

但是我一直给人的印象是,HTTP_REFERER(和其他类似的标头)可能会被欺骗,所以毫无意义。

2 个答案:

答案 0 :(得分:1)

  

我需要确保从POST到世界上的任何人都无法使用它,但是我可以使用哪种可能的身份验证机制来安全地公开其详细信息?

如果访问公共网站的每个人的浏览器都需要访问端点,那么您就不能这样做。

浏览器完全在用户的控制之下。他们可以检查浏览器所做的一切。然后,他们可以使用其他HTTP客户端来重新创建它。

如果您对浏览器足够信任,可以让它向您的Analytics API发出请求,那么您必须也信任浏览器的所有者。不可能将它们分开。


您能做的最好的事情就是分析发送到Analytics API的数据,以了解通常或不可能的行为方式。

答案 1 :(得分:0)

您可以使用CORS,从而使您的后端仅接收来自特定主机/ DOMAIN的请求