认证(src/routes/auth.php): - login / register / confirm-password 加 throttle:5,1,forgot-password 加 throttle:6,1。 实测发现登录原本并非零防护 —— Breeze 的 LoginRequest 有按(邮箱|IP)的 5 次/60 秒 RateLimiter(CACHE_DRIVER=file,真生效),它挡单账号撞库;路由级节流补的是 『换邮箱撒网 / 换 IP 轮换』这个口,两者互补。 - verification.verify(6,1) 与 verification.send(3,1) 原样未动。 - 已知取舍(未改,已登记):TrustProxies 配的是 $proxies='*',节流键取自 X-Forwarded-For 且外层 nginx 用 $proxy_add_x_forwarded_for 追加 → 客户端自带的假 XFF 会排在前面并被采信, 即限流键可伪造。修法是把信任代理收窄到 nginx 的地址/网段。 镜像信息收敛(Dockerfile): - 新增 /usr/local/etc/php/conf.d/zz-lsky-hardening.ini(expose_php=0 / display_errors=0), zz- 前缀保证不被别的 ini 覆盖;构建期用 php -r 真读回 ini_get 断言。 - 新增 /etc/apache2/conf-enabled/zz-lsky-hardening.conf(ServerTokens Prod / ServerSignature Off)。放 conf-enabled 而不是 vhost 模板:ServerTokens 是全局指令, 写进 VirtualHost 会被 Apache 拒绝加载。 - 自证从 8 条加到 9 条(新增 routes/auth.php 钉住),本地实算 9/9 通过。 依赖公告(OSV 扫描到 11 条,本次清掉两条有修复版本的): - psy/psysh v0.11.12 → v0.11.23(它在生产依赖树里、随镜像发布;Dockerfile 的 composer.lock md5 自证同步为新值),并从 osv-scanner.toml 删掉那条白名单。 - sweetalert2 11.4.6 → 11.22.4(前端依赖,会打进浏览器包)。升级后新版默认样式 div:where(.swal2-container) .swal2-input 与我们的皮肤权重打平并靠注入顺序取胜, 实测把输入框高度从 38px 压成 36.75px → 把皮肤前缀从 html 提到 html:root 修掉, 并同步 3 条断言;jsdom 290/290 全绿。 - OSV 门禁复跑:exit 0,已过滤清单里只剩 laravel 9.x 那 4 条(上游无修复版本) 与 debugbar / phpunit 等 dev-only 项。
87 lines
5.8 KiB
TOML
87 lines
5.8 KiB
TOML
# =============================================================================
|
||
# OSV 依赖漏洞门禁 —— 白名单(B8)
|
||
#
|
||
# 用途:CI 的 `deps-scan` job 对 src/composer.lock 与 test/package-lock.json 跑
|
||
# osv-scanner。**不在本文件里的**漏洞会让 CI 失败(退出非 0),
|
||
# 本文件里的(IgnoredVulns)会被过滤掉并在日志里打印「...filtered out because: <reason>」。
|
||
#
|
||
# 维护规则:
|
||
# · 只白名单「我们明确接受」的告警,每条都要写清 reason 与 ignoreUntil(复审日期)。
|
||
# · `ignoreUntil` 到期后该条不再生效(漏洞会重新报出来),逼你复审 —— 别当永久豁免。
|
||
# · 清单一旦变化(升级依赖 / 上游发新公告),CI 会红;那时要么修依赖,要么按下面格式加条目。
|
||
# · 白名单条目的 id 用 GHSA-…(osv-scanner 会把 CVE 等别名一并归到 GHSA 上)。
|
||
#
|
||
# 本文件内容 = 2026-09-30 真实扫描(osv-scanner v2.2.2)得到的全部命中,
|
||
# 逐条评估后接受;详见各条 reason。如何「修掉」而不是「白名单」见各组注释。
|
||
# =============================================================================
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# 1) laravel/framework 9.52.22 —— 生产依赖(会进镜像),Laravel 9 已 EOL
|
||
# 上游修复只落在 10.x / 11.x / 12.x / 13.x(见各条 fixed 版本),9.x 线拿不到补丁。
|
||
# 真正升级 = 跨大版本重写应用,不在「只维护镜像」的范围内;接受。
|
||
# 想根治:升到 laravel/framework 12.x 线(需同步改 src/ 应用代码)。
|
||
# -----------------------------------------------------------------------------
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-5vg9-5847-vvmq" # CVE-2026-48019:默认 email 规则里的 CRLF 注入
|
||
ignoreUntil = 2027-06-30
|
||
reason = "laravel/framework 9.x:上游修复在 12.60.0/13.10.0,9.x(EOL) 无补丁;站点非公开注册、未用该 email 规则"
|
||
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-78fx-h6xr-vch4" # CVE-2025-27515:文件校验绕过
|
||
ignoreUntil = 2027-06-30
|
||
reason = "laravel/framework 9.x:上游修复在 10.48.29/11.44.1/12.1.1,9.x(EOL) 无补丁;控制上传入口的校验规则已自行加固"
|
||
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-crmm-hgp2-wgrp" # 临时签名 URL 路径混淆
|
||
ignoreUntil = 2027-06-30
|
||
reason = "laravel/framework 9.x:上游修复在 12.61.1/13.12.0,9.x(EOL) 无补丁;本站未使用临时签名 URL 功能"
|
||
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-jh5r-qr3c-85q8" # CVE-2026-102279:调试页 XSS
|
||
ignoreUntil = 2027-06-30
|
||
reason = "laravel/framework 9.x:上游修复在 12.69.0/13.30.0,9.x(EOL) 无补丁;镜像里 APP_DEBUG 关闭,调试页不对外"
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# 2) psy/psysh —— **已修**(2026-09-30),不再需要白名单。
|
||
# 原 v0.11.12 命中 GHSA-4486-gxhx-5mg7(CVE-2026-25129:CWD 下 .psysh.php 自动加载
|
||
# 导致本地提权);它是**生产依赖**(随 laravel/tinker 进镜像),且上游在同一条 0.11 线
|
||
# 发了修复。已把 src/composer.lock 升到 v0.11.23,并同步更新 Dockerfile 里的 lock md5 自证
|
||
# (47dc4ba7… → 12ab2333…)。没有白名单兜底 —— 若 lock 被回退,这条会被扫描重新报出来。
|
||
# -----------------------------------------------------------------------------
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# 3) maximebf/debugbar v1.18.2 —— **开发依赖**(packages-dev)
|
||
# Dockerfile 用 `composer install --no-dev` 构建镜像 → 不随镜像发布。
|
||
# 命中的两条其实是它捆绑的 jQuery 的 XSS(CVE-2019-11358 / CVE-2020-11022),
|
||
# 对「镜像里有没有这个东西」无影响。
|
||
# -----------------------------------------------------------------------------
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-6c3j-c64m-qhgq" # CVE-2019-11358:jQuery 原型污染 XSS(debugbar 捆绑)
|
||
ignoreUntil = 2027-06-30
|
||
reason = "maximebf/debugbar 是 packages-dev 开发依赖,镜像用 --no-dev 构建 → 不进镜像;命中为捆绑的旧 jQuery"
|
||
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-gxr4-xjj5-5px2" # CVE-2020-11022:jQuery XSS(debugbar 捆绑)
|
||
ignoreUntil = 2027-06-30
|
||
reason = "同上:dev-only,不进 --no-dev 镜像"
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# 4) phpunit/phpunit 9.6.5 —— **开发依赖**(packages-dev),不进镜像。
|
||
# 上游已发 9.6.33(同线可修),同 psy/psysh,升级需动 lock + md5 自证 → 待办。
|
||
# -----------------------------------------------------------------------------
|
||
[[IgnoredVulns]]
|
||
id = "GHSA-vvj3-c3rp-c85p" # CVE-2026-24765:PHPT 覆盖率处理里的不安全反序列化
|
||
ignoreUntil = 2026-12-31
|
||
reason = "phpunit 是 packages-dev 开发依赖,不进 --no-dev 镜像;同线 9.6.33 已修,升级需动 lock(待办)"
|
||
|
||
# -----------------------------------------------------------------------------
|
||
# 5) sweetalert2 —— **已修**(2026-09-30),不再需要白名单。
|
||
# 它既是 test/ 行为测试的依赖(test/package-lock.json),也作为前端依赖被打进
|
||
# 镜像里的 public/js/app.js(resources/js/bootstrap.js 里 require 的)—— 所以本轮
|
||
# 把它从 11.4.6 升到 11.22.4(三条公告的总修复版本),src/ 与 test/ 两侧同步升。
|
||
# 锁定后:src/package-lock.json 与 test/package-lock.json 都解析到 11.22.4
|
||
# (swal-theme.test.mjs 有「两侧版本逐字一致」断言兜底),并重建了 public/js/app.js。
|
||
# 三条公告(GHSA-457r-cqc8-9vj9 / GHSA-8jh9-wqpf-q52c / GHSA-pg98-6v7f-2xfv)随之消失,
|
||
# 白名单条目已删除 —— 若任一侧的锁被回退,会被扫描重新报出来。
|
||
# -----------------------------------------------------------------------------
|