php artisan down --secret 用于启用维护模式并生成绕过凭证,仅允许携带匹配 ?secret=xxx 参数的请求访问,其他所有请求返回503;该机制基于URL参数校验,不涉及IP、User-Agent等网络信息判断。
什么是
的作用
并不是用来“对特定 IP 开放访问”的功能,它生成的是一个绕过维护模式的临时访问凭证(即 secret token),本质是 URL 后缀校验机制。Laravel 不会根据 IP 白名单做判断,而是检查请求中是否携带了匹配的
参数。
如何用
实现“仅限自己访问”
虽然不基于 IP,但你可以把 secret 当作私密入口钥匙,只在自己的
浏览器
或调试工具中使用。关键在于:这个 secret 仅在当前维护模式下有效,且每次执行
都会覆盖旧值。
启用维护模式,并允许通过
访问
访问地址变成类似
所有其他未带该参数的请求,包括你本机其他标签页、Postman、
curl
,默认返回 503
该 secret 不校验来源 IP、User-Agent 或 Referer,纯靠保密性 —— 所以别写死在代码里或提交到 Git
为什么不能直接靠
做 IP 限制
Laravel 内置的维护模式中间件
只做两件事:检查
文件是否存在,以及比对
是否匹配文件内容。它完全不读取
或任何网络层信息。
如果你真需要 IP 白名单,必须手动扩展:
Comet AI 浏览器
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
下载
}
注意:这要求你自定义维护文件格式(比如写 JSON 而非纯文本),并修改
命令行为(需重写 Artisan 命令或改用 shell 脚本写入)。
容易被忽略的关键点
维护模式的 secret 是明文写在
文件里的,只要能读取该文件(比如通过目录遍历、日志泄露、部署脚本误输出),别人就能绕过。生产环境务必确保
不可 Web 访问,且不要在错误页面或日志中打印该文件内容。
php artisan down --secretphp artisan down --secretsecret--secretphp artisan down --secret=xxxphp artisan down --secret="mydevkey"/?secret=mydevkeyhttps://yoursite.com/?secret=mydevkey--secret\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceModestorage/framework/downrequest()->input('secret')$_SERVER['REMOTE_ADDR']php artisan down
# 然后在 app/Http/Middleware/CheckForMaintenanceMode.php 中重写 handle() 方法(或新建中间件替换):
public function handle($request, Closure $next)
{
if (file_exists($this->downFile)) {
$data = json_decode(file_get_contents($this->downFile), true);
$allowedIps = $data['allowed_ips'] ?? ['127.0.0.1', '::1'];
if (! in_array($request->ip(), $allowedIps) &&
$request->input('secret') !== ($data['secret'] ?? null)) {
throw new MaintenanceModeException();
}
}
return $next($request);php artisan downstorage/framework/downstorage/