数论爱好者 发表于 2025-4-22 10:43:35

豆瓣电影网站,这几年我对它多次采集,每隔几个月它的规则都在变化.最初我用八爪鱼采集,一次可以采集一万个网页,后面的每分钟不能达到15个网页,达到就被封网24小时,人工也打不开.现在一个小时采集达到500个网页就封网了.

下面的,ai说的话,仅供参考.
针对Discuz论坛遭受的大规模广告攻击问题,以下是系统性解决方案,分为紧急处置、中期防护和长期迁移三个层面:

一、紧急处置措施(立即执行)

注册环节强化

启用邮箱+手机双验证注册(需人工审核)

添加解方程验证码,因子分解验证码等难度属于初中以上的内容

设置注册时间冷却(如30分钟内仅允许1次注册)

发帖限制策略

sql
-- 数据库直接执行以下限制(示例)
UPDATE pre_common_usergroup SET
    maxspm = 5,-- 每分钟发帖数
    maxposts = 20, -- 每日发帖上限
    allowpost = 0 WHERE groupid = 4; -- 禁止新用户组发帖
实时内容过滤

安装第三方关键词过滤插件(如「防水墙」)

设置敏感词自动屏蔽(包含联系方式、特殊符号等)

二、技术防护升级(24小时内可实施)

行为分析防御

php
// 在source/class/class_member.php中添加注册行为检测
if($this->membercount > 50 && time() - $firstreg < 3600) {
    $this->denyRegister('疑似批量注册');
}
动态验证机制

对高频操作启用滑动验证(如geetest)

关键操作添加TOTP动态口令(如每60秒变化)

日志监控体系

bash
# 定时清理脚本(crontab每小时执行)
grep 'register' ./data/log/* | awk -F'|' '{print $2}' | sort | uniq -c | sort -nr | head -50
三、数据迁移方案(中长期)

框架选型建议

现代化论坛:Flarum(PHP)/ Discourse(Ruby)

高性能方案:NodeBB(Node.js)

国内替代:StartBBS(PHP)

数据迁移脚本示例(Python)

python
import pymysql
from xml.etree import ElementTree as ET

# Discuz数据导出
dz_conn = pymysql.connect(host='localhost', user='dz_user', password='dz_pass', db='discuz_db')
dz_cur = dz_conn.cursor(pymysql.cursors.DictCursor)
dz_cur.execute("SELECT * FROM pre_forum_post WHERE dateline > UNIX_TIMESTAMP()-86400")

# 转换为新论坛格式
new_posts = []
for post in dz_cur:
    new_post = ET.Element('post')
    ET.SubElement(new_post, 'title').text = post['subject']
    ET.SubElement(new_post, 'content').text = post['message']
    new_posts.append(new_post)

# 保存为迁移文件
with open('migrate.xml', 'wb') as f:
    f.write(ET.tostring(new_posts))
四、高级防御建议

网络层防护

启用Cloudflare的Bot Management服务

设置ASN过滤(屏蔽IDC机房IP段)

机器学习方案

python
# 使用简单贝叶斯分类器示例
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(train_data, train_labels)# 训练历史数据
predictions = clf.predict(new_posts)# 实时预测
法律手段

对广告主域名进行whois查询

向主机商提交滥用投诉(需保存完整日志)

建议立即执行第一阶段的紧急措施,这些修改可以在不升级Discuz的情况下通过数据库直接操作和简单代码调整实现。同时推荐安装「防灌水」插件(如https://addon.dismall.com/plugins/tshuz_protect.html),这类插件通常包含成熟的规则引擎可以拦截90%以上的自动化攻击。

对于持续攻击的情况,应当考虑在Nginx层面添加速率限制:

nginx
http {
    limit_req_zone $binary_remote_addr zone=postlimit:10m rate=1r/s;
    server {
      location ~* /forum.php {
            limit_req zone=postlimit burst=5;
      }
    }
}

gxqcn 发表于 2025-4-22 17:03:19

启用Discuz内置防御机制

修改 config_global.php 文件中的 attackevasive 参数,通过组合数值限制异常请求:
[*]1(Cookie刷新限制):同一Cookie每秒刷新超过1次则限制访问,防止高频请求。
[*]2(限制代理访问):阻止通过代理IP发起的攻击,降低代理池对服务器的压力。
[*]4(二次请求验证):用户需等待2秒后重新加载页面,过滤自动化脚本。
[*]8(回答问题):当第一次访问时需要回答问题,答案正确后才可以看到页面的具体内容。

已设置为1|2|4,兼顾安全性与用户体验

nyy 发表于 2025-4-22 19:17:18

gxqcn 发表于 2025-4-22 17:03
修改 config_global.php 文件中的 attackevasive 参数,通过组合数值限制异常请求:
[*]1(Cookie刷新限制 ...

我点评你的帖子。
出现
频繁刷新限制

您访问本站速度过快或者刷新间隔时间小于两秒!请等待页面自动跳转 ...

nyy 发表于 2025-4-29 12:32:28

gxqcn 发表于 2025-4-22 17:03
修改 config_global.php 文件中的 attackevasive 参数,通过组合数值限制异常请求:
[*]1(Cookie刷新限制 ...

不仅要测试。而且要全面的测试
在电脑上测试过后,再用手机测试

nyy 发表于 2025-4-29 12:33:18

现在可以考虑取消人工审核。
因为人工审核肯定慢,
比不上自动审核。

nyy 发表于 2025-4-29 12:34:51

可以考虑改成付费注册,
比如5毛钱的注册费用,
收点钱还能给论坛当维护费用。
或者单独开一个付费注册。
人工审核与付费注册并行

ejsoon 发表于 2025-5-3 10:49:34

能不能不要每次登入的時候都提示我要修改密碼?
页: 1 2 3 [4]
查看完整版本: 新注册用户改成了人工审核了