Files
lsky-pro-docker/osv-scanner.toml
T
mole404 d77ba67d5c fix(security,deps): 认证端点节流 + 镜像信息收敛 + 两条依赖公告
认证(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 项。
2026-09-30 08:00:46 +08:00

87 lines
5.8 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 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)随之消失,
# 白名单条目已删除 —— 若任一侧的锁被回退,会被扫描重新报出来。
# -----------------------------------------------------------------------------