node.js - NodeJS 中如何识别来自同一源的两个请求?

标签 node.js http express ipv4 ddos

我的情况很简单:

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

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

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

在 Node/Express 中可以吗?

最佳答案

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

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

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

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

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

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

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

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

关于node.js - NodeJS 中如何识别来自同一源的两个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381323/

相关文章:

javascript - 使用 Swagger 和 Node.js 以及 SQL Server 作为数据库的 REST API

javascript - 如何从 mac 中完全删除 Ionic 和 Cordova 安装?

node.js - 如何使用VueJs添加img src属性

node.js - 使用 Bluebird Promises,如何通过延迟反模式解决这个问题?

java - 在netty中发送带有body的POST请求

mysql - Node Express MySql Sql 查询不起作用

java - 改造错误 java.io.IOException : Received authentication challenge is null

c# - 当我尝试通过HttpWebRequest上传音频文件时,Hololens应用程序卡住了

node.js - 错误 : User is not a constructor -- node js with express , Sequelize ,postgresQL

javascript - ExpressJS 和客户端中的 i18next 模块