首先启用Discuz!内置防CC功能,通过attackevasive参数设置多级防护(如1|4或1|2|4|8);其次修改discuz_application.php或misc_security.php代码,添加!IS_ROBOT或识别User-Agent,避免误伤搜索引擎爬虫;最后在Nginx配置limit_req_zone实现IP限流(如10r/s),返回429状态码,结合应用层与服务器层防御,形成多层防护体系。

Discuz! 遭遇CC攻击,核心是阻止大量伪造的请求耗尽服务器资源。防御需结合系统自带功能、代码调整和服务器层面的限流。
利用Discuz! 自带防CC功能
Discuz! X3.5及以上版本内置了“防拒绝服务攻击”参数(attackevasive),可通过组合不同数值来开启多级防护:
- 1 (cookie刷新限制):对频繁刷新的用户弹出验证。
- 2 (限制代理访问):阻止通过透明代理发起的请求。
- 4 (二次请求):要求用户进行第二次确认才能访问,有效拦截机器流量。
- 8 (回答问题):首次访问需回答简单问题,强度最高。
建议从低强度开始尝试,如先设置为2或4,若无效再组合使用,例如1|4或1|2|4|8。若最高级别仍无法抵御,说明攻击流量巨大,需借助专业高防服务。
修改代码避免误伤搜索引擎
直接开启防CC功能会误拦百度、谷歌等搜索引擎的爬虫(Spider),导致网站收录下降。必须修改代码让爬虫绕过验证:
-
方法一:编辑
/source/class/discuz/discuz_application.php文件,在相关判断前加入 !IS_ROBOT && 条件,确保机器人请求不触发防御。 -
方法二:在
/source/include/misc/misc_security.php文件中,通过识别User-Agent(如包含 "baiduspider"、"Googlebot" 等关键字)来放行主流搜索引擎的爬虫。
重要提示:修改任何文件前务必进行完整备份。
服务器层面限制攻击频率
仅靠应用层防护不够,必须在Web服务器上设置硬性限流规则,这是控制攻击频率最有效的手段。
以Nginx为例,可在配置文件中添加:
# 创建一个共享内存区,按IP记录请求状态 limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s;server {
应用限流规则到所有请求
limit_req zone=req_limit_per_ip burst=20 nodelay; # 触发限流时返回429状态码 limit_req_status 429;}
此配置将每个IP的请求速率限制为每秒10次,短时突发可达到20次。超过阈值的请求会被直接拒绝。根据网站正常流量情况,合理调整rate和burst值。
基本上就这些。关键在于多层设防:Discuz!功能应对一般刷量,代码修改保护SEO,服务器限流卡死高频攻击。










