建站一个月几乎每天都被攻击。。求解决思路

2014-12-23 21:42:53 +08:00
 Jack

建站一个月。。。几乎每天都在被攻击。。。而且道高一丈魔高一丈的。。。攻击方法不断升级。。。

我的架构是nginx php mysql,今天搭上了SSDB,依旧未管用

主要攻击是在搜索页,一开始是单一ip单一词汇刷而已
封了ip以后变成n个ip不停刷
于是我就把搜索使用的词封掉,于是变成n个8-10个词的组合不停的刷,就这也算有规律可循
但是到了今天变成了拿字典来刷,完全无规律组合词多ip不停搜索

一上来我就挂,即使我把搜过的纪录全放到了SSDB,但是还是一刷就挂,一堆新组合词语,mysql瞬间200%,nginx 503。

最后只能放上了验证码,机制是搜索10次填写一次验证码。。。至于这个办法是否管用现在还不知道。。。

有人建议用sphinx,我还没用,貌似文档不太友好,对我这个非技术人员比较头疼。。。

求专业技术大拿提供解决问题思路。。。

16469 次点击
所在节点    程序员
146 条回复
hicdn
2014-12-24 11:50:58 +08:00
@Jack 来用加速乐 www.jiasule.com,我们的防 CC 引擎会自动识别并拦截,如果有漏网之鱼,开启 Cookie 防 CC 和验证码防 CC,完美解决
oott123
2014-12-24 11:53:18 +08:00
@invite 你没有理解我的意思。
每个 token 5分钟过期的意思是每个 token 在内存里保存五分钟。
也就是说如果你要填满我的内存,你在五分钟内算出来的 token 个数应当比我的内存还大。
以一个 32 位 16 进制数为例,内存仅有 4 字节。假设每分钟计算100个token(已经很多了),五分钟才1m不到…
也许我算错了?
keefe
2014-12-24 11:54:08 +08:00
是subhd.com吧? 前天搜索字幕的时候还不需要输入验证码。

伪射手也在被攻击

加油哦!
bobopu
2014-12-24 11:54:24 +08:00
找sitelock
invite
2014-12-24 11:56:30 +08:00
@oott123 如果保存5分钟,也就是5分钟以后,我能重新使用这个token了,对吧?那只要我计算足够多的token,来填满这5分钟就可以了,然后重复使用。
oott123
2014-12-24 12:12:48 +08:00
@invite 五分钟以后你就没法用了啊…
算 token 的时候把时间戳插进去不就完事了…

服务端给出一个 base string = hash ( secret key + timestamp ),再给出前面用的 timestamp
要求客户端请求时发送 challenge = hash ( base string + random ) 和前面用的 timestamp 以及 random
要求 challenge 的前 n 位为 0
Jack
2014-12-24 12:22:30 +08:00
@lolicon 请问这个国内访问速度如何呢。。
Jack
2014-12-24 12:23:44 +08:00
@hicdn 网站不在国内没有备案,你们能帮忙通过一下吗。。。
lolicon
2014-12-24 12:29:48 +08:00
@Jack 收费版有香港节点 测速http://chdbits.org
invite
2014-12-24 12:34:11 +08:00
@oott123

basestring在服务器端存储多长时间?一个IP对应一个basestring?
Jack
2014-12-24 12:34:23 +08:00
@lolicon 价格略高。。。。对一个小站来说。。。
lolicon
2014-12-24 12:35:51 +08:00
@Jack 那你就用免费版不就得了
lolicon
2014-12-24 12:38:03 +08:00
@Jack 还有一家这个incapsula
oott123
2014-12-24 12:48:21 +08:00
@invite 不用存啊,只校验合法性…
比如你要对 IP 限定,你把 IP 也加到 base string 的 hash 里面去就是了…
服务器收到的时候,检查时间戳是否合法;如果合法,把收到的时间戳,IP和secret拼起来一看,和你传回来的 base string 一样不?不一样就丢了。
oott123
2014-12-24 12:49:29 +08:00
顺便提醒楼主,用 CDN 的话要屏蔽一切不来自 CDN 的访问,否则就没用了。
invite
2014-12-24 12:58:34 +08:00
@oott123 不存储?

那假设一开始对方根据 base string 和 timestamp 计算了一个 :

challenge = hash ( base string + random ) ,发送了一次: challenge 和 timestamp 和 random

那服务器怎么比较的?
oott123
2014-12-24 13:00:20 +08:00
@invite 你看啊,secret key 是固定的对吧,也就是对于唯一确定的 timestamp 有唯一确定的 base string 值对吧,那我还原出来不就好了…
invite
2014-12-24 13:11:31 +08:00
@oott123 那客户端多次发送同样的 challenge 和 timestamp 和 random,那服务器比较结果也是对的。肯定得存储一个值,来确保没有重复使用吧。
oott123
2014-12-24 13:58:15 +08:00
@invite 刚刚不是说了存 token 么…
102 楼…
hicdn
2014-12-24 14:13:24 +08:00
@Jack 没有备案只能用香港节点,http://www.jiasule.com/activity/kdjq/

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

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

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

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

© 2021 V2EX