如何防止 HTTP POST 请求仅被批准的 javascript 客户端接收?
How can I protect an HTTP POST request from only being received by an approved javascript client?
我有一个 URL 可以接受 POSTed 数据并存储它的记录——这是为了分析。我需要防止世界上任何人从 POST 访问它,但是我可以使用什么可能的身份验证机制来安全地公开其详细信息?我不认为 javascript 可以访问任何秘密数据而不使它成为 public.
我可以基于任何 HTTP header,但这些都可以被欺骗,对吧?
如果有帮助,客户端和服务器都是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'
写入文件
现在,缺陷是任何人都可以简单地 POST 任何东西到 stats.php
并且它会写入文件。我想将其限制为我的 'client',即 https://example.com/index.html
.
如果可以的话,我会在stats.php
中做这样的事情:
if ($_SERVER["HTTP_REFERER"] == 'https://example.com') {
do_stuff();
} else {
die('not allowed');
}
但我一直认为 HTTP_REFERER(和其他类似的 headers)可能只是被欺骗,所以那将毫无意义。
您可以使用 CORS
并使您的后端仅接收来自特定主机的请求/DOMAIN
I need to secure that against anyone in the world from POSTing to it, but what possible authentication mechanism can I use that it is safe to expose the details of?
如果访问 public 网站的每个人的浏览器都需要访问端点,那么您不能。
浏览器完全在用户的控制之下。他们可以检查浏览器所做的一切。然后他们可以使用其他一些 HTTP 客户端重新创建它。
如果您足够信任浏览器,让它向您的分析发出请求API,那么您也必须信任浏览器的所有者。分开是不可能的。
您能做的最好的事情就是分析发送到分析器的数据 API 以了解常见或不可能的行为模式。
我有一个 URL 可以接受 POSTed 数据并存储它的记录——这是为了分析。我需要防止世界上任何人从 POST 访问它,但是我可以使用什么可能的身份验证机制来安全地公开其详细信息?我不认为 javascript 可以访问任何秘密数据而不使它成为 public.
我可以基于任何 HTTP header,但这些都可以被欺骗,对吧?
如果有帮助,客户端和服务器都是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'
写入文件
现在,缺陷是任何人都可以简单地 POST 任何东西到 stats.php
并且它会写入文件。我想将其限制为我的 'client',即 https://example.com/index.html
.
如果可以的话,我会在stats.php
中做这样的事情:
if ($_SERVER["HTTP_REFERER"] == 'https://example.com') {
do_stuff();
} else {
die('not allowed');
}
但我一直认为 HTTP_REFERER(和其他类似的 headers)可能只是被欺骗,所以那将毫无意义。
您可以使用 CORS
并使您的后端仅接收来自特定主机的请求/DOMAIN
I need to secure that against anyone in the world from POSTing to it, but what possible authentication mechanism can I use that it is safe to expose the details of?
如果访问 public 网站的每个人的浏览器都需要访问端点,那么您不能。
浏览器完全在用户的控制之下。他们可以检查浏览器所做的一切。然后他们可以使用其他一些 HTTP 客户端重新创建它。
如果您足够信任浏览器,让它向您的分析发出请求API,那么您也必须信任浏览器的所有者。分开是不可能的。
您能做的最好的事情就是分析发送到分析器的数据 API 以了解常见或不可能的行为模式。