如何在 NodeJS 中识别来自同一来源的两个请求?
How do I identify two requests from the same source in NodeJS?
我的情况很简单:
我需要一个应用层解决方案来识别来自同一来源的请求,然后对其应用某种规则。
如果有人从 Postman、浏览器或 cURL 请求我的服务器,我想识别这个人,然后用这些信息做一些事情。
在我的特殊情况下,我想将一个会在一段时间内攻击我的服务器的人列入黑名单。
Node/Express可以吗?
无论请求是如何发起的(浏览器、cURL、Postman、node.js 应用程序、PHP 应用等...).
这个问题在网络开发新手中经常出现。最后归结为两件事:
要求用户拥有一个帐户,登录该帐户才能使用您的服务,每次使用该服务都需要登录凭据,然后跟踪他们的使用情况以查看它是否符合您的使用指南.如果没有,您可以禁止该帐户。
按帐户或 IP 地址或两者的某种组合对用户进行速率限制。如果它们超过某个速率限制,您可以减慢它们的速度或拒绝访问。
浏览器提供了一个 cookie,因此您可以尝试通过浏览器 cookie 识别重复用户。但是,这可以通过清除 cookie 来解决。 Cookie 是针对每个浏览器的,因此您不能将多个设备或多个浏览器中的同一用户与普通 cookie 相关联。
cURL 和 Postman 默认不提供除原始 IP 地址以外的任何识别信息。您可以尝试跟踪 IP 地址,但仅依赖 IP 地址存在一些问题,因为企业用户可能会通过代理,这使他们看起来都来自同一个 IP 地址。如果您禁止一名用户的不当行为,可能会影响到许多其他无辜用户。
如果您查看 Google、Facebook 等如何执行此操作,它们都要求您创建某种帐户,然后在每次请求时为该帐户提供凭据。这使他们可以跟踪您的使用情况并在需要时管理您的流量。而且,对于免费使用,它们通常都有速率限制,限制您拨打 API 电话的频率。这可以防止任何单个用户使用超过适当份额的服务负载。而且,它允许他们检测和管理滥用系统的帐户。
比这更进一步的是如何创建帐户,因为您不希望滥用者能够每 10 分钟 运行 一个脚本来自动创建一个新帐户。也有多种保护方案。最常见的是只需要一些证据证明有人参与创建新帐户(验证码、question/answer 等),这会阻止自动创建帐户。其他检查可能需要有效的信用卡、唯一的电子邮件地址验证等...
我的情况很简单:
我需要一个应用层解决方案来识别来自同一来源的请求,然后对其应用某种规则。
如果有人从 Postman、浏览器或 cURL 请求我的服务器,我想识别这个人,然后用这些信息做一些事情。
在我的特殊情况下,我想将一个会在一段时间内攻击我的服务器的人列入黑名单。
Node/Express可以吗?
无论请求是如何发起的(浏览器、cURL、Postman、node.js 应用程序、PHP 应用等...).
这个问题在网络开发新手中经常出现。最后归结为两件事:
要求用户拥有一个帐户,登录该帐户才能使用您的服务,每次使用该服务都需要登录凭据,然后跟踪他们的使用情况以查看它是否符合您的使用指南.如果没有,您可以禁止该帐户。
按帐户或 IP 地址或两者的某种组合对用户进行速率限制。如果它们超过某个速率限制,您可以减慢它们的速度或拒绝访问。
浏览器提供了一个 cookie,因此您可以尝试通过浏览器 cookie 识别重复用户。但是,这可以通过清除 cookie 来解决。 Cookie 是针对每个浏览器的,因此您不能将多个设备或多个浏览器中的同一用户与普通 cookie 相关联。
cURL 和 Postman 默认不提供除原始 IP 地址以外的任何识别信息。您可以尝试跟踪 IP 地址,但仅依赖 IP 地址存在一些问题,因为企业用户可能会通过代理,这使他们看起来都来自同一个 IP 地址。如果您禁止一名用户的不当行为,可能会影响到许多其他无辜用户。
如果您查看 Google、Facebook 等如何执行此操作,它们都要求您创建某种帐户,然后在每次请求时为该帐户提供凭据。这使他们可以跟踪您的使用情况并在需要时管理您的流量。而且,对于免费使用,它们通常都有速率限制,限制您拨打 API 电话的频率。这可以防止任何单个用户使用超过适当份额的服务负载。而且,它允许他们检测和管理滥用系统的帐户。
比这更进一步的是如何创建帐户,因为您不希望滥用者能够每 10 分钟 运行 一个脚本来自动创建一个新帐户。也有多种保护方案。最常见的是只需要一些证据证明有人参与创建新帐户(验证码、question/answer 等),这会阻止自动创建帐户。其他检查可能需要有效的信用卡、唯一的电子邮件地址验证等...