【问题标题】:How can I protect an HTTP POST request from only being received by an approved javascript client?如何保护 HTTP POST 请求不被批准的 javascript 客户端接收?
【发布时间】:2019-09-24 00:11:30
【问题描述】:

我有一个 URL 可以接受 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(和其他类似的标头)可能只是被欺骗,所以这毫无意义。

【问题讨论】:

  • 向端点提供哪种参数?
  • 目前只有一个参数:url。
  • 您没有与当前用户相关的任何信息?应用程序还是什么?
  • 您写道:我如何保护 HTTP POST 请求不被批准的 javascript 客户端接收 b>? 是客户端接收请求还是服务器接收?或者,您的意思是对请求的响应只会发送给经过认证的客户?
  • @BobbyJack — 什么都没有。 CSRF 只会阻止攻击者欺骗第三方用户向您的网站发出请求,该请求会做坏事(例如在论坛上发布垃圾邮件)。它不会阻止攻击者直接攻击。

标签: javascript http security authentication analytics


【解决方案1】:

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

【讨论】:

  • 知道我要在服务器上设置哪些标头吗?我已经在发送“Access-Control-Allow-Origin:example.com”,但这似乎并不能阻止我从其他地方发布到该 URL。
  • 这只会阻止攻击者通过第三方浏览器发起攻击。它不会阻止他们直接从其他 HTTP 客户端发出请求。
【解决方案2】:

我需要防止世界上任何人向它发布信息,但是我可以使用哪些可能的身份验证机制来安全地公开详细信息?

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

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

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


您能做的最好的事情就是分析发送到分析 API 的数据,找出常见或不可能的行为模式。

【讨论】:

  • 我也刚刚得出这个结论!即使我可以,“攻击者”真正需要做的唯一一件事是“欺骗”这些请求,无论如何都要不断刷新页面,所以我想这不值得。正如你所说,我只需要在活动结束后尝试清理任何“坏”数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多