Laravel 12 应通过中间件校验 Origin 头白名单(如 https://admin.internal.company),配合 config/app.php 动态配置多环境域名,并启用 CORS 中间件同步设置 allowed_origins;Referer 仅作辅助校验,且必须叠加 API Token 或 JWT 等真实鉴权。

要让 Laravel 12 的接口只允许公司内网域名(如 https://admin.internal.company、https://app.internal.company)调用,核心是校验请求头中的 Origin 或 Referer,并结合中间件做白名单拦截。注意:这种限制属于前端/网络层防护,不能替代服务端真实鉴权(如 API Token、JWT),因为请求头可被手动构造绕过。
用中间件校验 Origin 白名单
浏览器跨域请求会自动携带 Origin 头,这是最标准、最可靠的判断依据。你需要创建一个中间件,读取该头并比对预设的内网域名列表。
- 运行命令生成中间件:
php artisan make:middleware AllowInternalOrigins - 编辑
app/Http/Middleware/AllowInternalOrigins.php,在handle()方法中写入:$origin = $request->headers->get('Origin'); $allowed = config('app.internal_origins', [ 'https://admin.internal.company', 'https://app.internal.company', 'http://localhost:3000' // 开发环境可保留 ]); if ($origin && !in_array($origin, $allowed)) { abort(403, 'Access denied: origin not allowed'); } return $next($request); - 在
config/app.php末尾添加配置项,便于多环境管理:'internal_origins' => [ 'production' => ['https://admin.internal.company', 'https://app.internal.company'], 'local' => ['http://localhost:3000', 'https://admin.internal.company'], ], // 然后在中间件里用:config('app.internal_origins.' . app()->environment(), [])
配合 CORS 配置确保响应头一致
如果前端是浏览器应用,光拦截还不够,还要让响应带上正确的 CORS 头,否则预检请求(OPTIONS)会失败。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 确认已启用
Fruitcake\Cors\HandleCors中间件(Laravel 9+ 默认集成) - 编辑
config/cors.php,设置:'paths' => ['api/*'], 'allowed_origins' => config('app.internal_origins.' . app()->environment(), []), 'supports_credentials' => true, 'allowed_headers' => ['*'], - 确保
App\Http\Kernel.php的$middlewareGroups['api']包含\Fruitcake\Cors\HandleCors::class
补充:对非浏览器请求做 Referer 回退校验
部分脚本或 CLI 工具(如 curl)不带 Origin,但可能有 Referer。你可以作为辅助判断,但不要单独依赖它——Referer 更易伪造。
- 在中间件中追加逻辑:
$referer = $request->headers->get('Referer'); if (!$origin && $referer && !str_starts_with($referer, 'https://admin.internal.company') && !str_starts_with($referer, 'https://app.internal.company')) { abort(403, 'Referer not allowed'); } - 注意:仅当业务明确要求支持这类客户端时才开启;多数内部 API 应强制使用
Origin+ 认证凭证
关键提醒:必须搭配真实鉴权使用
仅靠域名限制无法防止攻击者伪造请求头。务必同步实施服务端身份验证:
- API 路由必须加
auth:sanctum或auth:api中间件 - 使用 Laravel Sanctum 或 Passport 发放有效 token,并校验其签名与有效期
- 敏感操作(如删除、支付)额外增加二次确认或权限检查(
@can)










