jonnybarnes.uk/app/Http/Middleware/CSPHeader.php

47 lines
1.7 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Middleware;
use Closure;
2019-10-27 20:55:46 +00:00
use Illuminate\Http\Request;
2022-08-05 20:35:49 +01:00
use Illuminate\Support\Facades\App;
2023-02-18 09:34:57 +00:00
use Symfony\Component\HttpFoundation\Response;
class CSPHeader
{
/**
* Handle an incoming request.
*/
2023-02-18 09:34:57 +00:00
public function handle(Request $request, Closure $next): Response
{
2022-08-05 20:35:49 +01:00
if (App::environment('local', 'development')) {
return $next($request);
}
// headers have to be single-line strings,
// so we concat multiple lines
// phpcs:disable Generic.Files.LineLength.TooLong
return $next($request)
->header(
'Content-Security-Policy',
"default-src 'self'; " .
"style-src 'self' cloud.typography.com jonnybarnes.uk; " .
"img-src 'self' data: blob: https://pbs.twimg.com https://jbuk-media.s3-eu-west-1.amazonaws.com https://jbuk-media-dev.s3-eu-west-1.amazonaws.com https://secure.gravatar.com https://graph.facebook.com *.fbcdn.net https://*.cdninstagram.com https://*.4sqi.net https://upload.wikimedia.org; " .
"font-src 'self' data:; " .
"frame-src 'self' https://www.youtube.com blob:; " .
2020-06-25 20:57:32 +01:00
'upgrade-insecure-requests; ' .
'block-all-mixed-content; ' .
'report-to csp-endpoint; ' .
'report-uri https://jonnybarnes.report-uri.io/r/default/csp/enforce;'
2018-03-17 13:57:03 +00:00
)->header(
2019-10-27 20:55:46 +00:00
'Report-To',
'{' .
"'url': 'https://jonnybarnes.report-uri.io/r/default/csp/enforce', " .
"'group': 'csp-endpoint', " .
2019-10-27 20:55:46 +00:00
"'max-age': 10886400" .
'}'
);
// phpcs:enable Generic.Files.LineLength.TooLong
}
}