搞了一个五秒盾方案,大伙帮忙看看都有哪些漏洞。

2021-04-30 17:49:06 +08:00
 c137rick

因为一些原因需要搞一个类似于 Cloudflare 的五秒盾,不是给公司用的,给个人站点用的。大伙看看有没有什么问题,比如绕过的方法,或者一些漏洞可以被用来攻击。

下面是流程图。

注意:流程图中提到的服务器是类似 Apache 和 Nginx 这样的服务器软件。

5678 次点击
所在节点    程序员
35 条回复
HenryGe
2021-04-30 18:00:49 +08:00
挂一个 proxy ip 池,每隔一秒换一个 ip, 只需要 5 个 ip 轮换,就轻松破功。
c137rick
2021-04-30 18:02:30 +08:00
@HenryGe #1 code 计算时是有 IP 的,IP 变化了服务端计算 code 时就对不上了,会重新计算三个 cookie 然后重定向到五秒盾。
HenryGe
2021-04-30 18:10:36 +08:00
@c137rick 你不懂攻击操作手法。每个 IP 的请求 cookie 都是独立的。
chairuosen
2021-04-30 18:11:12 +08:00
防的是什么?
5 秒后这个正常请求如果被重放,似乎并不会被拦?
HenryGe
2021-04-30 18:12:09 +08:00
@c137rick 说白了就是 5 台肉鸡就破了。
woodensail
2021-04-30 18:13:41 +08:00
我看你似乎在无 cookie 状态下没做任何判断就直接生成 cookie 了?
如果对方针对这个来打爆你的数据库能撑得住吗,还是说在数据库层面做了 ip 去重。
c137rick
2021-04-30 18:14:21 +08:00
@HenryGe #3 我的五秒盾的目的是对于每个用户首次访问需要延迟五秒,我不是专业的,能否把具体的攻击方式描述一下?所谓攻击就是绕过首次的五秒延迟。
clf
2021-04-30 18:15:57 +08:00
5S 盾的机制应该是像 1 分钟请求超过 100 次或者是 1s 超过 5 次之类时后端做个接口熔断。

然后前端路由切换过快时,做个前端拦截。

你现在单纯的判断上次请求的时间,意思就是每个接口请求间隔必须 5s,那么用户使用体验极差,还有就是像现在的前后端分离的页面,你进入页面后基本都要请求 N 个接口,那么这些接口请求还要间隔 5s 么。如果不需要,怎么判断是正常访问你的页面还是脚本爆破你的服务器呢。
c137rick
2021-04-30 18:16:31 +08:00
@chairuosen #4 目标就是每个用户首次访问时延迟五秒,延迟五秒后正常访问。重放是可以重放,但是没有意义吧?比如换一个 IP 重放会导致服务端计算的 code 对不上。
c137rick
2021-04-30 18:17:08 +08:00
@woodensail 服务端不存储任何信息,服务端完全依靠客户端的 cookie 验证。
c137rick
2021-04-30 18:17:50 +08:00
@lychs1998 我没有描述清楚,这个五秒盾只是首次访问的时候延迟五秒,之后就不会延迟了。
superrichman
2021-04-30 18:18:30 +08:00
恭喜你重新发明了 jwt
chairuosen
2021-04-30 18:19:11 +08:00
@c137rick #9 CF 做延迟 5 秒是为了放 D 。。。你是为了给用户添堵?。。。。。不能只照着皮毛抄呀。。
不换 IP 重放,code 是一样的
c137rick
2021-04-30 18:21:52 +08:00
@chairuosen #14 延迟五秒后五秒盾就不会再起作用了,后续会有专门的机制限制 IP 的访问频率。想使用这两个机制稍微抵抗一下代理池。
suomy
2021-04-30 18:24:33 +08:00
那我首次访问伪造一下 time cookie 不就破了吗?
c137rick
2021-04-30 18:25:58 +08:00
@suomy #15 只有在客户端提供的 code 和服务器计算的 code 相同时才会判断时间,如果 code 对不上是不会走到判断时间这一步的。
woodensail
2021-04-30 18:33:39 +08:00
@c137rick 服务端不存储的话,对方岂不是很容易就伪造 hash 了。还是说你寄希望于对方摸不透你 cookie 的生成算法?
woodensail
2021-04-30 18:35:25 +08:00
哦,等下,你有个 salt 是吧,也就是靠 salt 保密那倒是基本上没问题了,除了不防重放以外。
c137rick
2021-04-30 18:38:29 +08:00
@woodensail #17 Cookie 生成算法是可以公开的,因为生成 code 时用到了服务端的一个长度为 128 的随机字符串。对方知道算法也没办法伪造吧?攻击者可以伪造 uid 和 time,但是 code 生成时不仅使用了客户端 IP 和 uid,还使用了一个仅存储在服务端的随机字符串,所以 code 应该时不能伪造的。大概没问题吧?
c137rick
2021-04-30 18:41:14 +08:00
@woodensail #18 重放确实不防,不过五秒盾的后面还有一个限制 IP 访问频率的机制,应该可以缓解一下。我是希望使用这两种机制来缓解一下来自代理池的攻击。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/774411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX