我的情况很简单:
我需要一个应用层解决方案来识别然后将某种规则应用于来自同一来源的请求。
如果一个人要从Postman,浏览器或cURL请求我的服务器,我想识别这个人然后对这些信息做些什么。
在我的特定情况下,我想将一个可能会攻击我的服务器的人列入黑名单。
是否可以在Node / Express中使用?
答案 0 :(得分:4)
无论请求是如何发起的(浏览器,cURL,邮递员,node.js应用程序,PHP应用程序等),Web请求都没有超级标识符可以告诉您用户是否在请求后面。 )。
这个问题在新的Web开发人员中经常出现。最后归结为两件事:
要求用户拥有一个帐户,登录该帐户才能使用您的服务,每次使用该服务时都需要登录凭据,然后跟踪其使用情况,以确定其是否符合您的使用指南。如果没有,您可以禁止该帐户。
通过帐户或IP地址或两者的某种组合对用户进行速率限制。如果超过某个速率限制,您可以放慢速度或拒绝访问。
浏览器提供cookie,因此您可以尝试通过浏览器cookie识别重复用户。但是,这可以通过清除cookie来解决。 Cookie是按浏览器进行的,因此您无法通过普通Cookie将多个设备或多个浏览器中的同一用户关联起来。
除了原始IP地址之外,cURL和邮递员默认不提供任何识别信息。您可以尝试跟踪IP地址,但是仅依赖于IP地址存在一些问题,因为企业用户可能正在通过代理,这使得它们看起来都来自相同的IP地址。如果你禁止一个用户行为不当,那可能会影响很多其他无辜的用户。
如果你看看Google,Facebook等是如何做到这一点的,他们都要求你创建某种帐户,然后为每个请求提供该帐户的凭据。这样,他们就可以根据需要跟踪您的使用情况并管理您的流量。而且,对于免费使用,它们通常都有速率限制,限制您进行API调用的频率。这可以防止任何单个用户使用超过服务负载的适当份额。并且,它允许他们检测和管理滥用系统的帐户。
比这更进一步涉及如何创建帐户,因为您不希望滥用者能够每10分钟运行一次脚本来自动创建新帐户。有各种各样的方案来保护这一点。最常见的只是需要一些人员参与创建新帐户(验证码,问题/答案等)的证据,这会阻止自动创建帐户。其他支票可能需要有效的信用卡,唯一的电子邮件地址验证等...