- 老库升级强制项:ALTER TABLE sq_admin MODIFY password varchar(255) NOT NULL (P0-05 bcrypt 哈希入库;新装走 wenquan_auth.sql 无需执行) - 本地覆盖:function/config.local.inc.php(gitignore)自动被 config.inc.php include - 回归验收清单覆盖 P0-01~12 全部加固点;已知残留(开卡扣款无事务)记录在案
74 lines
3.7 KiB
Markdown
74 lines
3.7 KiB
Markdown
# 部署说明(P0 加固版,2024 QuanAuth)
|
||
|
||
> 基线:PHP 7.3.4 与 PHP 8.2.9 双版本、MySQL(utf8/InnoDB)、nginx 8081 与内置服务器 8082 双通道回归全过。
|
||
> 提交序列:加固-01~12(P0-①~⑩ + P0-05b)。
|
||
|
||
## 1. 环境要求
|
||
- PHP 7.3 ~ 8.2(ePay 内置库已做 PHP8 兼容:`get_magic_quotes_gpc` shim、`count(字符串)` 修复)
|
||
- MySQL ≥5.6(InnoDB;连接 charset utf8)
|
||
- Web 目录使用 ASCII 路径(本部署 PHP 无法访问含中文的路径,如 `D:\桌面\...`)
|
||
|
||
## 2. 全新部署
|
||
1. 仓库代码放入 Web 根(如 `D:\phpstudy_pro\WWW\wenquanauth`)
|
||
2. 建库 `wenquan_auth`(utf8),导入仓库自带 `wenquan_auth.sql`
|
||
(该 dump 已含 `sq_admin.password varchar(255)`)
|
||
3. 写本地 DB 覆盖配置 `function/config.local.inc.php`(gitignore,不入库):
|
||
```php
|
||
<?php
|
||
$G['db']['server'] = 'localhost';
|
||
$G['db']['user'] = '你的DB用户';
|
||
$G['db']['pass'] = '你的DB密码';
|
||
$G['db']['dbname'] = 'wenquan_auth';
|
||
```
|
||
`function/config.inc.php` 已内置自动 include 该覆盖文件。
|
||
4. 本地执行 `install.php` 完成初始化(install.php 为本地文件,不随仓库分发,已 gitignore;
|
||
安装完成后建议删除或禁用)。安装会捕获 `sq_config.weburl`——**请确认其 host 部分为真实
|
||
站点域名**(P0-07 起支付回调/结果页跳转 URL 的 host 信任该配置的 host 部分,缺失才回退
|
||
HTTP_HOST 旧行为)。
|
||
5. 启动 PHP CGI(phpStudy:127.0.0.1:9000)并配 nginx vhost:
|
||
```nginx
|
||
server {
|
||
listen 8081;
|
||
server_name 127.0.0.1;
|
||
root D:/phpstudy_pro/WWW/wenquanauth;
|
||
index index.php;
|
||
location / { try_files $uri $uri/ /index.php?$args; }
|
||
location ~ \.php$ {
|
||
fastcgi_pass 127.0.0.1:9000;
|
||
include fastcgi_params;
|
||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||
}
|
||
}
|
||
```
|
||
快速自检可用内置服务器(单 worker,仅开发验收):
|
||
`php -S 127.0.0.1:8082 -t D:\phpstudy_pro\WWW\wenquanauth`
|
||
|
||
## 3. 老库升级(本版本首启必须执行)
|
||
```sql
|
||
ALTER TABLE sq_admin MODIFY password varchar(255) NOT NULL;
|
||
```
|
||
P0-05 起 admin/agent/user 密码统一以 bcrypt(60 位)入库;列不扩容则升级后的账号
|
||
首次登录会因哈希写入失败而登录异常。
|
||
旧 md5(admin)/明文(agent、user)密码**无需手动迁移**:首次登录成功即惰性升级;
|
||
P0-05b 保证后续登录不重写哈希,同账号并行会话不被破坏。
|
||
|
||
## 4. 回归验收清单
|
||
| 项目 | 期望 |
|
||
|---|---|
|
||
| admin/agent 双会话 | 两个会话 checklogin 均有效,DB 哈希不再改写 |
|
||
| tckm.html 状态开关 | 返回「成功」且落库(原「啊嘞嘞???」,P0-09) |
|
||
| tckm.html 导出/清空 | JSON code=1+sign / code=2+nums,下载内容正确 |
|
||
| 卡密支付 czkm | 正常扣减;并发双单恰一单成功,无双花(P0-07) |
|
||
| 代理余额 yezf | money 与 allspend 原子只扣/加一次 |
|
||
| 免费订单跳转 | URL host 取自配置;`Host: evil.com` 投毒无效 |
|
||
| ePay 回调 notify/return | 条件落库幂等;代理余额不被清零 |
|
||
| PHP 8.2 运行时 | ePay 库无致命错误 |
|
||
| XFF 取真实 IP | 私有网段被跳过(P0-08) |
|
||
| 0 折封禁 | 折率=0 时开卡/购商品被拒 code=-5(P0-10) |
|
||
| SQLi 回归 | 动态列名/裸拼值注入全部拒绝(P0-06) |
|
||
|
||
## 5. 已知残留(记录在案,未纳入本轮 P0)
|
||
- agent `creatkey/creatfidkey/buyagent` 的扣款与插入仍无事务:插入失败时钱照扣
|
||
(2019 遗留)。建议后续按 P0-07 同款原子条件 UPDATE + 失败补偿模式改造。
|
||
- 审计文档中的 CAPTCHA 强化、PHP 8.3 基线清理属 P1/P2,不在本轮范围。
|