防接口恶意刷
方案一
思路:限制同一ip或用户的访问频率。
实现:redis key1超时时间内记录访问次数,达到次数后添加key2标记为block状态。每次先查询是否block,然后在累积key1的值。
缺点是时间段一个个独立的,跨时间段可能访问频次已经超过限制了。
方案二
思路:添加接口签名,防止对方构造请求。签名时需要包括时间戳防止重放。
另一种取巧的方案,添加时间戳字段,不过时间戳的最后一位是根据前n位算出来的,这种情况下得到的新时间戳与原时间戳在时间上差距很小,对方可能难以判断出问题在这。这种情况需要前后端配合并且客户端需要混淆。
方案三
思路:自定义协议,内容都是加密后的,这样破解的成本会更高。
方案四
思路:让客户端做一些运算,运算的结果需要在服务端校验。这种情况可以让恶意狂刷接口的攻击方消耗更多的资源。
不过同时也会影响一些正常用户的体验。例如验证码也算这类,例如服务端生成两个大质数,给这两个质数的积,由前端还原。