javascript - Express.js - 请求者域/IP 可靠性

标签 javascript node.js express security backend

我最近看到this SO 发布有关获取请求域的文章。我想知道此信息是否可靠(即攻击者可以“伪造”此信息吗?)。具体来说,域和请求类型(GET、POST 等)。我问的原因是因为我不确定是否可以使用它来保护我的应用程序的后端。我认为我应该只允许来 self 自己的域的 POST 请求。

最佳答案

客户端(如浏览器)发送的请求并非来自特定域。它们来自客户端的 IP 地址。该客户端可能正在运行来自特定站点的网页,但是请求中包含的任何信息都不能被信任,并且可以被欺骗为客户端想要的任何信息。再想一想这个问题。客户端请求不是来自域。它们来自客户端,在发出 API 请求之前,该客户端可能已收到也可能未收到来自特定域的网页。

所以,不,您不能使用客户端提供的页面域信息来实现任何合理的安全性。如果请求确实包含有关请求代码来自哪个网页的信息,则该信息很容易被恶意客户端欺骗。

从浏览器使用的 API 可能需要与登录用户结合使用(通过登录 cookie 或登录后获得的某种安全 token ),但除此之外无法“保护”。为了使浏览器能够访问您的 API,任何其他客户端(包括恶意客户端)也可以访问该 API。

Google 等公司对浏览器内使用的 API 采取的保护类型包括:

  • API token ,允许他们跟踪特定 token 的使用情况和/或撤销滥用服务的 token
  • 评级限制,以防止特定 API 用户或 IP 地址滥用 API 服务
  • 对允许的使用进行许可,然后在服务器端跟踪看似允许或不允许的使用
  • 监控登录用户的使用情况,以撤销滥用服务 API 的登录
  • 在网页中动态生成并定期更改的短期 API token 。

因此,您可以在允许访问您的服务之前要求 API 帐户或用户登录。除此之外,人们通常会保护 API 免遭滥用,同时意识到确定的自定义客户端仍然可以访问 API。

I figured that I should only allow POST requests from my own domain.

您应该只允许来自有效的登录用户的 POST 请求(每个 API 请求都需要登录凭据),并且您应该只允许它们影响该特定用户有权修改的数据。您无法控制请求的来源或执行请求的客户端类型。

关于javascript - Express.js - 请求者域/IP 可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56641355/

相关文章:

javascript - javascript中具有公共(public)回调的类

PHP 自动缩小。有没有?

node.js - Express/node.js 204 HTTP 代码响应问题

javascript - Node 的通用日志记录,快速应用程序——最佳实践?

node.js - Node.js-如何接收和解析multipart/formData作为具有字段和文件的对象数组?

javascript - 如何使用用户输入的关键字在 Node.js 中执行 Twitter API 搜索

javascript - Meteor 1.2 上的 Iron Router 存在布局问题

javascript - 如何将动态创建的文本框值传递给jquery中的数组

javascript - 使用CoreOS和多个Docker容器构建应用程序的正确方法

node.js - 找不到有效的 Gruntfile