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

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

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

下面是流程图。

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

5707 次点击
所在节点    程序员
35 条回复
c137rick
2021-04-30 18:45:17 +08:00
@suomy #15 确实,time 可能被伪造,我生成 code 时算上 time 吧。谢了!
c137rick
2021-04-30 18:46:35 +08:00
@woodensail #18 好像有一个问题,首次访问时只需要修改一下 time 就能绕过了,这应该是一个漏洞。我打算用让 time 参加到 code 的生成过程中,这样应该就没问题了。
rrfeng
2021-04-30 19:15:57 +08:00
首先指定一个用户标记:ip 、uid 、cookie 都行,识别用户。
然后存一个用户的 『首次访问时间』就行了,哪有这么麻烦?用户识别和时间都是以服务器为准,怎么都伪造不了。
clf
2021-04-30 19:32:46 +08:00
@c137rick #11 看下来后,其实你只要服务器上缓存用户的首次访问时间就行了,以服务端为准,对客户端应该是无感的。过了 5s 限制后服务端把这个缓存记录清除就可以了。(其实和 jwt 的场景很像,二次加密一下 jwt 就是你的 code 计算了。

另外,首次访问延迟 5s 这个需求就有点奇怪(干脆登录接口调用后延迟 5s 下发数据得了。
woodensail
2021-04-30 20:20:27 +08:00
@lychs1998 我感觉楼主就是想实现一个不依赖数据库的鉴权,有些类似于 jwt 。
zjsxwc
2021-04-30 21:32:06 +08:00
http2 协议一次请求代替 n 次原先 http 1 协议的请求,

楼主是开倒车吗
yujiang
2021-04-30 22:50:43 +08:00
你这个也不防 d 啊,流量照样全打上。
个人网站直接套 cf 就好,做这个东西没啥意义,挡不住的。而且这样做就意味着你全站没法用现成的大厂 CDN,回源会出问题。cf5 秒盾后面还有一整套的风控,不是咱几行代码就能抄过来的
ysc3839
2021-05-01 10:42:17 +08:00
没仔细看,但感觉没学到精髓。
印象中 Cloudflare 那个主要是要客户端脚本跑一个比较复杂的算法,防止那些非浏览器的流量进来。算法会故意混淆,防止有人直接用其他语言实现,而且可能几天就换一下,使得只有用 JavaScript 引擎才能算出。
而你这个方案,感觉简单研究一下就能用别的语言实现了。
c137rick
2021-05-01 11:58:17 +08:00
@yujiang #28
@ysc3839 #27

只是学个样子而已,没有打算做 JS Challenge 。我只是想用这个五秒盾搭配 IP 访问频率限制来抵抗一下使用代理池的脚本而已。
discrete
2021-05-01 14:58:21 +08:00
可以写个 JS 让客户端帮你算 Proof of Work,然后你服务端交到矿池上去。如果被 D 你也是赚了,不被 D 最好
Stain5
2021-05-01 15:17:21 +08:00
@c137rick 挡不了爬虫 也就挡挡普通用户

爬虫花几分钟就能爬遍整个小网站,还在意等这几秒吗
no1xsyzy
2021-05-01 15:42:05 +08:00
@c137rick 那就不要提 CF
简单地说就是对每个 IP 首次访问进行 5 秒延迟。
那你首先得把其他方面做到非得用代理池才能爬。
c137rick
2021-05-01 16:03:59 +08:00
@Stain5 #31 提高一下攻击成本而已,主要用来对付脚本小子。
@no1xsyzy #32 并不会为了对付爬虫,主要是为了对付一些消耗服务器性能的攻击,后面还有限制单个 IP 的访问频率的机制,也只是能提高一点攻击成本而已,并不那么有用。
c137rick
2021-05-01 16:05:04 +08:00
@discrete #30 鬼才
firefox12
2021-05-03 23:08:26 +08:00
我每次都用你 10 秒以前的 key 不久好了,你设置了 cookie 我不需要用啊 1 个 key 无限使用。

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

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

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

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

© 2021 V2EX