如何修复 Chrome CSP 阻止的登录和注销重定向?

问题描述 投票:0回答:2

所以我在 Laravel 网站中启用了 CSP,它在本地主机上运行得非常好。但是,当使用域在 Linux 服务器上部署网站时出现问题,它给了我一个错误。

拒绝将表单数据发送到“https://example.com/login”,因为它违反了以下内容安全策略指令:“form-action 'self' https: *.example.com”。

我在自定义 CSP 中添加了一个自定义指令,其链接与登录请求链接完全相同,但它不起作用。我在一些论坛上读到,这可能是由 Google Chrome 阻止任何重定向链接引起的,因为这可能很危险,是的,我使用 Laravel Redirect 旨在将用户登录后重定向到 Homeprovider,但为什么它只影响登录和注销请求?它不会影响除 2 之外的其他表单请求。我想知道这个问题是否有任何解决方案,我在互联网上搜索了许多解决方案,但似乎都不起作用。谢谢你,我真的很感谢你的回答。

这是我在 LoginController 中的登录方法:

 public function store(Request $request): RedirectResponse {
        $this->ensureIsNotRateLimited();
        $request->validate([
            'email' => ['required', 'string', 'lowercase', 'email', 'max:255'],
            'password' => ['required', 'string'],
        ]);

        if(! Auth::guard('admin')->attempt($request->only('email', 'password'), $request->boolean('remember'))) {
            RateLimiter::hit($this->throttleKey());
            throw ValidationException::withMessages([
                'email' => trans('auth.failed'),
            ]);
        }
        $notification = array(
            'message' => 'Anda berhasil login!',
            'alert-type' => 'success',
        );
        $request->session()->regenerate();
        RateLimiter::clear($this->throttleKey());
        return redirect()->intended(RouteServiceProvider::ADMIN_DASHBOARD)->with($notification);
    }

这是我从 LoginController 注销的方法:

    public function destroy(Request $request): RedirectResponse {
        Auth::guard('admin')->logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return redirect('/admin/login');
    }

我在自定义 CSP 中添加了自定义指令,但它不起作用

 ->addDirective(Directive::FORM_ACTION, 'https://example.com/login')
 ->addDirective(Directive::FORM_ACTION, 'https://example.com/logout');
laravel google-chrome content-security-policy laravel-10
2个回答
0
投票

您可以添加一个

Content-Security-Policy-Report-Only
标头,其策略与您的可执行策略相同,但处于仅报告模式。这不会阻止任何内容,但会向指定的报告 URI 报告违规行为。这可以帮助确定到底是什么被阻止以及原因:

header("Content-Security-Policy-Report-Only: default-src 'self'; form-action 'self' https://example.com/login https://example.com/logout; report-uri /your-report-uri");

0
投票

您允许 *.example.com,其中包含 example.com 的子域。您需要更改为 example.com。或者,如果您想允许将表单发布到 example.com 和所有子域,请使用 example.com 和 *.example.com。

© www.soinside.com 2019 - 2024. All rights reserved.