49 lines
3.1 KiB
Plaintext
49 lines
3.1 KiB
Plaintext
圣巧依官网 · 安全加固补丁部署说明
|
||
====================================
|
||
|
||
本补丁依据安全扫描报告,修复以下全部问题(部署后无需额外配置):
|
||
|
||
【高危 / High】
|
||
1. 缺失 HSTS(复查补充:增加 preload)
|
||
-> 新增 Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
||
(preload 已随本补丁追加,可直接提交至浏览器 HSTS 预加载列表)
|
||
2. CSP 过于宽松(script-src 含 'unsafe-inline')
|
||
-> 改为基于 nonce 的严格 CSP:script-src 'self' 'nonce-xxx'(移除 'unsafe-inline'/'unsafe-eval');
|
||
前端入口通过输出缓冲自动为所有内联 <script>/<style> 注入本次请求 nonce;
|
||
原 27 处内联 onclick/onsubmit 确认框已重构为 data-confirm 属性 + admin.js 委托监听。
|
||
3. 管理后台登录无验证码 / 限速不足
|
||
-> 登录增加算术验证码(无第三方依赖);并新增 IP 级失败限速(fail2ban 式,文件缓存),
|
||
与原有会话级限速叠加,抗机器人暴力破解。
|
||
|
||
【中危 / Medium】
|
||
4. 缺失 Permissions-Policy
|
||
-> 新增 Permissions-Policy 收敛 geolocation/microphone/camera/payment/usb 等敏感 API。
|
||
5. 联系表单缺垃圾防护
|
||
-> 新增蜜罐字段(隐藏,机器人填写即静默丢弃)+ 算术验证码 + 服务端输入校验(姓名/电话格式/长度)
|
||
+ 后端 IP 级提交限速(每 15 分钟最多 5 次,复用 storage/rate_contact.json)。
|
||
6. 客户端输入校验缺失
|
||
-> 登录与联系表单增加 maxlength/pattern/inputmode/autocomplete 等原生校验属性。
|
||
7. 密码框缺 autocomplete
|
||
-> 登录密码框 autocomplete="current-password",账号框 autocomplete="username",联系表单电话 autocomplete="tel"。
|
||
|
||
【低危 / Low】
|
||
8. 缺失 robots.txt -> public/robots.txt(屏蔽 /admin/、/CRM/、/PSI/)。
|
||
9. 缺失规范链接 -> 前端布局注入 <link rel="canonical">。
|
||
10. 暴露 Vite 开发产物 -> 经核查项目未使用 Vite(public/ 下无 .vite / node_modules / @vite 资源),属误报,无需处理。
|
||
11. 缺失 X-XSS-Protection -> 新增 X-XSS-Protection: 1; mode=block(旧浏览器纵深防御)。
|
||
|
||
【额外修复(报告外但同属高危)】
|
||
- 根入口 index.php 含 phpinfo() 信息泄露,已移除并转发至正式入口 public/index.php。
|
||
|
||
二、部署步骤
|
||
-----------
|
||
1. 将 security-patch.zip 内文件按相同目录结构覆盖上传到站点根目录。
|
||
2. 确保站点根目录可写(IP 限速缓存会写入 storage/login_ip.json;若不可写,限速降级为仅会话级,不影响其他功能)。
|
||
3. 刷新后台登录页与联系页,确认出现验证码、删除/操作确认弹窗正常、页面无 JS 报错。
|
||
4. 建议部署后通过浏览器开发者工具「网络」面板确认响应头包含
|
||
Strict-Transport-Security、Content-Security-Policy(含 nonce-)、Permissions-Policy、X-XSS-Protection。
|
||
|
||
三、回滚
|
||
-------
|
||
保留部署前文件备份即可回滚。CSP 收紧若导致个别内联脚本异常,优先检查是否仍有遗漏的内联事件处理器或 <script> 未带 nonce(正常页面均会自动注入)。
|