如何在 NodeJS 中识别来自同一来源的两个请求?

Vic*_*ira 1 http ddos ipv4 node.js express

我的情况很简单:

我需要一个应用层解决方案来识别,然后将某种规则应用于来自同一来源的请求。

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

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

是否可以在 Node/Express 中使用?

jfr*_*d00 6

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

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

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

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

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

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

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

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