【问题标题】:How do I identify two requests from the same source in NodeJS?如何在 NodeJS 中识别来自同一来源的两个请求?
【发布时间】:2017-02-22 10:33:52
【问题描述】:

我的情况很简单:

我需要一个应用层解决方案来识别并应用某种规则来处理来自同一来源的请求。

如果有人从 Postman、浏览器或 cURL 请求我的服务器,我想识别这个人,然后用这些信息做一些事情。

在我的特殊情况下,我想将一个会在一段时间内攻击我的服务器的人列入黑名单。

在 Node/Express 中可以吗?

【问题讨论】:

标签: node.js http express ipv4 ddos


【解决方案1】:

无论请求是如何发起的(浏览器、cURL、Postman、node.js 应用程序、PHP 应用程序等),Web 请求都没有附带的 uber 标识符来告诉您请求背后的用户是谁。 .).

这个问题经常出现在新的 Web 开发人员中。最后归结为两件事:

  1. 要求用户拥有一个帐户,登录该帐户才能使用您的服务,每次使用该服务时都需要登录凭据,然后跟踪他们的使用情况以查看它是否符合您的使用指南。如果没有,您可以禁止该帐户。

  2. 通过帐户或 IP 地址或两者的某种组合对用户进行速率限制。如果它们超过某个速率限制,您可以减慢它们的速度或拒绝访问。

浏览器提供 cookie,因此您可以尝试通过浏览器 cookie 识别重复用户。但是,这可以通过清除 cookie 来解决。 Cookie 是针对每个浏览器的,因此您无法将跨多个设备或跨多个浏览器的同一用户与普通 cookie 关联起来。

默认情况下,cURL 和 Postman 不提供任何识别信息,而不是原始 IP 地址。您可以尝试跟踪 IP 地址,但仅依赖 IP 地址存在一些问题,因为企业用户可能正在通过代理,这使他们看起来都来自同一个 IP 地址。如果您因一名用户的不当行为而将其封禁,这可能会影响许多其他无辜用户。

如果您查看 Google、Facebook 等如何做到这一点,它们都要求您创建某种帐户,然后在每次请求时为该帐户提供凭据。这使他们可以跟踪您的使用情况并在需要时管理您的流量。而且,对于免费使用,它们通常都有速率限制,限制您进行 API 调用的频率。这可以防止任何单个用户使用超过适当份额的服务负载。而且,它允许他们检测和管理滥用系统的帐户。

比这更进一步涉及如何创建帐户,因为您不希望滥用者能够每 10 分钟运行一次脚本来自动创建一个新帐户。也有多种方案可以保护这一点。最常见的只是需要一些证据证明有人参与了创建新帐户(验证码、问题/答案等),这会阻止自动创建帐户。其他检查可能需要有效的信用卡、唯一的电子邮件地址验证等...

【讨论】:

  • 好吧,我现在看到了整个问题。我们正在考虑会话/令牌,但尚未实施。我收到一个关于代理的问题。所以你告诉我禁止IP会阻止一大群无辜的用户要求我们的东西,对吗?但这不仅仅是因为代理,对吧?我的意思是,至少在我的国家(我认为任何其他的工作方式都一样)一组亲密的互联网用户被赋予了相同的公共 IP 地址,即他们所连接的路由器/交换机。这与地理有关,但也是一个问题,对吧?不仅是代理(就 IP 禁令而言)
  • @VictorFerreira - 是的,在多个用户之间共享 IP 地址的任何情况下,都可能导致仅基于 IP 地址的跟踪问题。公司代理只是其中的一种情况,但足以让您需要避免它。
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多