我有一个URL,它将接受POST数据并存储它的记录-用于分析。我需要确保从POST到世界上的任何人都可以免受攻击,但是我可以使用哪种可能的身份验证机制来安全地公开其详细信息?我认为JavaScript无法在不公开的情况下访问任何秘密数据。
我可以将其基于任何HTTP标头,但是这些都可以被欺骗,对吗?
如果有帮助,则客户端和服务器均为https。
编辑:我认为我需要更明确地陈述问题;对不起,我以为我可以简明扼要地解释它,但显然没有发现!想象一下:
https://example.com/index.html
上的静态页面包含脚本https://example.com/script.js
。
该脚本向另一个远程URL发出请求,例如
ajax_call('https://stats.example.com/stats.php', 'some data');
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(和其他类似的标头)可能会被欺骗,所以毫无意义。
答案 0 :(得分:1)
我需要确保从POST到世界上的任何人都无法使用它,但是我可以使用哪种可能的身份验证机制来安全地公开其详细信息?
如果访问公共网站的每个人的浏览器都需要访问端点,那么您就不能这样做。
浏览器完全在用户的控制之下。他们可以检查浏览器所做的一切。然后,他们可以使用其他HTTP客户端来重新创建它。
如果您对浏览器足够信任,可以让它向您的Analytics API发出请求,那么您必须也信任浏览器的所有者。不可能将它们分开。
您能做的最好的事情就是分析发送到Analytics API的数据,以了解通常或不可能的行为方式。
答案 1 :(得分:0)
您可以使用CORS
,从而使您的后端仅接收来自特定主机/ DOMAIN
的请求