本文档说明如何报告 route-forge/laravel 的安全问题,以及部署本包时必须理解的安全边界。
请勿通过公开 Issue 报告漏洞。 使用 GitHub 私密漏洞报告:
https://github.com/route-forge/php-laravel/security/advisories/new
维护者确认收到后会尽快回复。若确认存在漏洞,修复会在私有 fork 中准备,并与安全通告(GHSA) 一并发布;在此之前请勿公开披露细节。
报告时尽量包含:受影响版本、完整 config/forge.php 相关片段、最小复现请求(含 HTTP 方法与
来源 IP)、你判断的危害面。
| 版本 | 是否获得安全修复 |
|---|---|
| 2.x | ✅ |
| 1.x | ❌ 不再主动维护,可照报评估 |
版本兼容矩阵(PHP / Laravel)见 .docs/SPEC.md §7。
本包的设计前提:元信息端点是公开端点,路由的层级归属(tier)不是访问控制手段。请逐条确认。
-
层级端点的中间件保护必须显式配置。
levels.*.endpoint_middleware与顶层endpoint_middleware默认均为空 = 不限制访问。 若某个层级的路由清单本身属于敏感信息(暴露内部路径、参数名、管理端点), 你必须自己给它挂上认证 / 授权中间件。参见.docs/SPEC.md§3.1.5。 -
strict_mode = false会把未分级路由汇入unassigned层级。 默认行为下,任何未匹配到层级的具名路由都会进入公开的unassigned层并出现在摘要里。 生产环境建议strict_mode = true:未分级路由会直接抛RouteTierNotAssignedException,从而在开发阶段就被发现,而不是静默泄露清单。 -
管理器页面只允许在开发环境存在。
/_forge/manager仅在APP_DEBUG = true时注册,并由manager_allowed_ips做第二层 IP 白名单(默认['127.0.0.1', '::1'],即仅本机)。 生产环境务必保证APP_DEBUG = false——这是唯一必要的一道闸,IP 白名单只是纵深防御。 白名单取值口径(SPEC §3.3):列表精确匹配;'*'放行任意来源;单个字符串等价于只含它的数组; 该键完全缺失时按默认值仅放行本机;只有显式null或[]才是放开限制,此时任何来源都能 读取全部路由元信息与运行时配置,请确认确有需要。 -
@forgeSummary只内嵌摘要,绝不内嵌层级路由明细。 受保护路由的清单始终按层级经 HTTP 懒加载,不会被预置进公开 HTML。 请不要为了"提速"把这个不变量改掉。 -
不要在
levels.*.description等会随元信息下发的字段里写敏感信息。 这些字段会出现在摘要端点响应中,任何能访问该端点的人都能读到。
- 前后端契约(端点、字段、错误码):
.docs/SPEC.md - 设计决策与威胁模型取舍:
.docs/DESIGN.md