假设小丑是由例如AWS基础设施托管的Batman创业batmanrules.com
的最大程度的复杂,装备精良且恶意的用户。 batmanrules.com的业务逻辑要求未注册的用户能够向batman.com的REST API层发送http请求,这会导致(以一种或另一种方式)对基于AWS的数据库的查询调用。 Batman不想受到数据库类型的限制(可以是SQL或noSQL)。
小丑希望通过发送尽可能多的http请求以破坏蝙蝠侠的财政状况,以提高蝙蝠侠的AWS账单。小丑使用本书中的所有最新技巧,使用类似于DDOS的方法,从batman.com业务逻辑中的各种机制针对不同IP地址发送http请求。
主要问题:蝙蝠侠如何在维持正常用户正常运行的同时防止财务崩溃?
假设正在进行大量通信,那么如何从非恶意中清除“恶意”查询,尤其是当用户未注册时?我知道您可以对IP地址进行速率限制,但是小丑(最老练又装备精良的小丑)不能找到巧妙的方法来从不断变化的IP地址发出请求,或者调整请求,这样就不会有两个是完全一样吗?
注意:我的问题不是针对拒绝服务的问题,而是假设蝙蝠侠的经济损失是可以确定的。蝙蝠侠在使架构随负载变化而向上和向下缩放方面做得非常出色,他唯一担心的是,高负载(由Joker的恶作剧引起)导致高成本。
我的直觉告诉我,这里没有灵丹妙药,蝙蝠侠必须在其业务逻辑中建立防护措施(例如,如果流量在某些参数内达到峰值,则应关闭)和/或要求对所有非平凡对象都使用reCAPTCHA令牌提交给REST API的请求。
答案 0 :(得分:1)
您可以使用AWS WAF并配置规则以阻止恶意用户。
例如,简单的规则是进行基于速率的阻塞,如果您发现它极不可能从同一IP地址同时获得超过X个请求的数量。
对于高级用例,您可以通过使用Lambda分析请求日志并在WAF中应用该块来实现自定义规则。
此外,正如您清楚地确定的那样,不可能阻止所有恶意请求。目标应该是检查并防止这是一个正在进行的过程,该过程具有适当的体系结构以根据需要阻止请求。