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