Laravel13+Filament+Vue项目:CSRF保护下如何让谷歌爬虫访问AdSense页面?
登录后页面接入Google AdSense的CSRF与爬虫访问问题
核心问题解答
谷歌爬虫能不能绕开CSRF验证访问登录页?
不行。谷歌爬虫不会自动处理Laravel的CSRF令牌,正常登录请求会因为缺少有效令牌被拦截,根本进不了授权页面。要不要给爬虫做专属登录页并禁用CSRF防护?
可以这么做,但绝对不能全局禁用CSRF,只能针对爬虫专属的登录路由单独关闭验证,同时要严格限制这个路由的访问主体。这种方案安全性怎么样?
只要做好限制,风险完全可控。核心是只允许Google AdSense的爬虫访问这个专属登录入口,同时给爬虫用的账号设置最小权限,避免被恶意利用。
具体实现方案(适配Laravel 13 + Filament)
1. 识别AdSense爬虫
AdSense爬虫的User-Agent里会包含 Mediapartners-Google,可以通过这个标识判断请求来源。
2. 搭建爬虫专属登录逻辑
- 先在后台创建一个专门的爬虫用户,比如命名为
adsense_crawler,用Filament的权限系统只给它分配查看目标页面的权限,不能给任何编辑、删除、修改的权限,把权限缩到最小。 - 新增一个不需要CSRF验证的登录路由,只给爬虫用:
// routes/web.php Route::post('/adsense-auto-login', [AdsenseAuthController::class, 'autoLogin'])->withoutMiddleware([VerifyCsrfToken::class]);
- 控制器里写自动登录逻辑,直接用预设的爬虫用户ID登录,同时校验User-Agent:
// app/Http/Controllers/AdsenseAuthController.php public function autoLogin(Request $request) { // 只允许AdSense爬虫访问 if (!str_contains($request->userAgent(), 'Mediapartners-Google')) { abort(403, 'Unauthorized'); } // 登录预设的爬虫用户 auth()->loginUsingId(1); // 替换成你的爬虫用户ID return redirect()->intended('/'); }
3. 用中间件自动处理爬虫登录
创建一个中间件AllowAdsenseCrawler,让爬虫访问目标页面时自动完成登录:
// app/Http/Middleware/AllowAdsenseCrawler.php public function handle(Request $request, Closure $next) { // 检查是否是AdSense爬虫且未登录 if (str_contains($request->userAgent(), 'Mediapartners-Google') && !auth()->check()) { auth()->loginUsingId(config('adsense.crawler_user_id')); } return $next($request); }
然后把这个中间件注册到app/Http/Kernel.php的web中间件组里,或者单独给需要展示广告的路由组使用。
4. 额外安全校验
- 不要把爬虫用户的密码泄露出去,因为我们用的是
loginUsingId直接登录,完全不需要密码。 - 定期查看服务器日志,检查这个专属登录路由的访问记录,确保只有AdSense爬虫在访问。
- 严格按照Google AdSense的规则展示广告,避免页面内容违规导致账号被封。
内容的提问来源于stack exchange,提问作者Francisco Sanchez de la Campa
相关产品推荐
相关产品推荐

