Skip to content

Commit

Permalink
Fix & Enable back CSP - Fixes #417
Browse files Browse the repository at this point in the history
  • Loading branch information
Bubka committed Nov 19, 2024
1 parent c6d0bcb commit e349c10
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 10 deletions.
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ PROXY_FOR_OUTGOING_REQUESTS=null
# This is mainly used as a defense against cross-site scripting (XSS) attacks, in which
# an attacker is able to inject malicious code into the web app

CONTENT_SECURITY_POLICY=false
CONTENT_SECURITY_POLICY=true


# Leave the following configuration vars as is.
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ ENV \
# CSP helps to prevent or minimize the risk of certain types of security threats.
# This is mainly used as a defense against cross-site scripting (XSS) attacks, in which
# an attacker is able to inject malicious code into the web app
CONTENT_SECURITY_POLICY=false \
CONTENT_SECURITY_POLICY=true \
# Leave the following configuration vars as is.
# Unless you like to tinker and know what you're doing.
BROADCAST_DRIVER=log \
Expand Down
23 changes: 17 additions & 6 deletions app/Http/Middleware/AddContentSecurityPolicyHeaders.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,24 @@ class AddContentSecurityPolicyHeaders
*/
public function handle(Request $request, Closure $next) : Response
{
// if (config('2fauth.config.contentSecurityPolicy')) {
// Vite::useCspNonce();
if (config('2fauth.config.contentSecurityPolicy')) {
Vite::useCspNonce();

// return $next($request)->withHeaders([
// 'Content-Security-Policy' => "script-src 'nonce-" . Vite::cspNonce() . "';style-src 'self' 'unsafe-inline';connect-src 'self';img-src 'self' data:;object-src 'none';",
// ]);
// }
$assetUrl = config('app.asset_url') != config('app.url') ? config('app.asset_url') : '';

$directives['script-src'] = "script-src 'nonce-" . Vite::cspNonce() . "' " . $assetUrl . ";";
$directives['script-src-elem'] = "script-src-elem 'nonce-" . Vite::cspNonce() . "' " . $assetUrl . " 'strict-dynamic';";
$directives['style-src'] = "style-src 'self' " . $assetUrl . " 'unsafe-inline';";
$directives['connect-src'] = "connect-src 'self';";
$directives['img-src'] = "img-src 'self' data: " . $assetUrl . ";";
$directives['object-src'] = "object-src 'none';";

$csp = implode(' ', $directives);

return $next($request)->withHeaders([
'Content-Security-Policy' => $csp,
]);
}

return $next($request);
}
Expand Down
2 changes: 1 addition & 1 deletion config/2fauth.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
'proxyLogoutUrl' => env('PROXY_LOGOUT_URL', null),
'appSubdirectory' => env('APP_SUBDIRECTORY', ''),
'authLogRetentionTime' => envUnlessEmpty('AUTHENTICATION_LOG_RETENTION', 365),
'contentSecurityPolicy' => envUnlessEmpty('CONTENT_SECURITY_POLICY', false),
'contentSecurityPolicy' => envUnlessEmpty('CONTENT_SECURITY_POLICY', true),
],

/*
Expand Down
2 changes: 1 addition & 1 deletion resources/views/landing.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<link rel="icon" type="image/png" href="{{ asset('favicon.png') }}" />
<link rel="apple-touch-icon" href="{{ asset('favicon_lg.png') }}" />
<link rel="apple-touch-icon-precomposed" href="{{ asset('favicon_lg.png') }}" />
<link rel="manifest" href="{{ asset('manifest.json') }}">
<link rel="manifest" href="manifest.json">

</head>
<body>
Expand Down

0 comments on commit e349c10

Please sign in to comment.