多用户站群 SEO 蜘蛛池系统
基于 Veitool 框架(ThinkPHP 8.x + Layui 2.13.x)开发,支持多用户分级权限、六大搜索引擎独立计费、泛解析站群管理、积分充值与易支付对接,一套系统即可搭建可运营的蜘蛛池 SaaS 平台。
用户与权限
统一后台入口 /system(管理员与普通用户共用,内置图片验证码);三级角色:超级管理员 / 管理员 / 注册用户,菜单按角色渲染;注册用户仅进入个人中心,无系统管理权限,清缓存等敏感操作限超级管理员;个人中心支持资料与密码修改。
积分与充值
1 元 = 100 积分(比例可配置);对接易支付兼容 API,支持固定金额 / 自定义金额 / 混合三种模式,可设充值限额与固定档位;充值、消费、调整、退还均有明细流水。
SEO 引擎管理
内置百度、谷歌、必应、360、搜狗、神马六大引擎预置规则;支持 UA 匹配 / IP 匹配 / IP+UA 三种识别模式;每引擎可独立配置普通引导与 301 强引单价,引导数从预设选项选择(如 1000/3000/5000/10000)。
站群系统
支持泛解析域名绑定(如 *.abc.com),子域与主域独立接管渲染;每站点可配置 302 强引占比、轮询权重、真实 IP 识别头、蜘蛛单次展示链接数;内置 CMS 内容抓取引擎(正则规则可配,带缓存)。蜘蛛来访时按强引占比执行 302 跳转或页面渲染引导,实时扣减额度并记录计费流水。
链接投放
批量提交链接(每行一条,单次最多 1000 条,自动去重);引导次数从引擎预设选项选择;可配置是否允许用户自选投放站群(关闭则全站轮询);预付费扣积分,额度耗尽自动完成,支持暂停 / 续投。
系统安全
敏感操作需管理员二次确认;全量日志记录(登录 / 操作 / 异常)便于审计;内置安全模块拦截常见攻击与大部分 WebShell 上传;内置 CC 防护(阈值与时间窗口需修改 xsafe.php)。
环境与安装
PHP ≥ 8.1(需 pdo_mysql、mbstring、curl、gd、fileinfo 扩展)、MySQL 5.7+、Nginx / Apache。安装:源码放到站点目录,运行目录指向 /public,访问 http://你的域名/install 按向导配置数据库与管理员账号,完成后访问 /system 登录;站群域名需支持泛解析 *.你的域名 到服务器,并在后台「蜘蛛池管理 → 站群站点」绑定。

下面是我用PI agent 做的安全修复
审计报告
我对 YanyvSEO(ThinkPHP8 + Veitool 的多用户站群蜘蛛池系统)的代码做了全面审计,重点排查了积分计费、易支付对接、站群渲
染、用户权限等核心业务逻辑。以下是发现的问题及已修复的 bug。
### 已修复(3 处高危并发竞态/安全问题)
1. Wz::consume 链接额度并发超扣(计费正确性)
app/index/controller/Wz.php
- 原代码:pickLink 选出 used < total 的链接后,inc('used') 与流水插入非原子,蜘蛛高并发访问时多个请求同时通过额度检查
,导致同一链接 used 超额、用户被重复扣量却无对应流水。
- 修复:改为原子条件更新——UPDATE pool_link SET used=used+1 WHERE lid=? AND used<total,依据受影响行数判断是否真正扣到
量;扣量失败(额度已被并发耗尽)则不再记流水,杜绝超扣与无流水。
2. Pay::notify 支付回调并发重复入账(资金安全)
app/index/controller/Pay.php
- 原代码:if($rs->status == 1) 检查与积分入账不在同一原子操作内,恶意重复/并发回调可导致同一订单多次到账积分。
- 修复:改用原子条件抢占——UPDATE pool_recharge SET status=1 WHERE rid=? AND status=0,仅当订单仍为待支付时才处理;同时
将加积分与更新订单放入同一事务,保证原子性。并补上缺失的 use think\facade\Db。
3. Wz::display 模板名路径穿越(防御加固)
app/index/controller/Wz.php
- 原代码:$name 直接拼接进 $file = $base.$name.'.tpl',虽 TP 路由 :name 默认不含 /,但缺深层次文件名校验。
- 修复:为 $name 加白名单正则 /^[a-z0-9_\-]+$/i,非法文件名直接 404,彻底杜绝读取任意模板文件。
### 其他发现(低危/设计使然,未改动,供参考)
- Database::edit SQL 拼接:ALTER TABLE \{$table}` COMMENT='{$note}'` 直接拼接表名。仅后台管理员可用且有 `strip_sql` 过
滤,风险受限,但建议后续改为参数化/白名单校验表名。
- my/Link::submit 入库异常回滚不完整:非 PDOException 的异常会中断脚本,导致已入库链接未计入 $ok,用户被扣全款但部分链
接生效且不退款(边缘 case)。
- real_ip_head 信任可伪造头:若站点配置 X-Forwarded-For 为真实 IP 识别头,攻击者可伪造 IP 绕过蜘蛛识别刷 302 强引量(
业务设计使然,但需运维层加来源 IP 校验)。
- Manager::index?do=info 越权隐患:do=info 分支可查任意用户资料,缺少 do=json 分支那样的 getRoleExt() 限制。默认注册用
户无该菜单权限故低危,但若权限配置放开则存在越权。
以上 3 处高危问题已修复,其余低危问题建议结合部署环境评估后再处理。





