|
14 | 14 | * @since 3.3.0
|
15 | 15 | * @license https://opensource.org/licenses/mit-license.php MIT License
|
16 | 16 | */
|
| 17 | + |
17 | 18 | namespace App;
|
18 | 19 |
|
19 |
| -use CakeDC\CachedRouting\Routing\Middleware\CachedRoutingMiddleware; |
20 | 20 | use Cake\Core\Configure;
|
21 | 21 | use Cake\Core\ContainerInterface;
|
22 | 22 | use Cake\Error\Middleware\ErrorHandlerMiddleware;
|
23 | 23 | use Cake\Http\BaseApplication;
|
24 |
| -use Cake\Http\MiddlewareQueue; |
25 | 24 | use Cake\Http\Middleware\BodyParserMiddleware;
|
| 25 | +use Cake\Http\Middleware\CspMiddleware; |
| 26 | +use Cake\Http\Middleware\HttpsEnforcerMiddleware; |
| 27 | +use Cake\Http\Middleware\SecurityHeadersMiddleware; |
| 28 | +use Cake\Http\MiddlewareQueue; |
26 | 29 | use Cake\Routing\Middleware\AssetMiddleware;
|
| 30 | +use CakeDC\CachedRouting\Routing\Middleware\CachedRoutingMiddleware; |
| 31 | +use Psr\Http\Message\ResponseInterface; |
| 32 | +use Psr\Http\Message\ServerRequestInterface; |
| 33 | +use Psr\Http\Server\RequestHandlerInterface; |
27 | 34 |
|
28 | 35 | /**
|
29 | 36 | * Application setup class.
|
@@ -77,7 +84,40 @@ public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
|
77 | 84 | // Catch any exceptions in the lower layers,
|
78 | 85 | // and make an error page/response
|
79 | 86 | ->add(new ErrorHandlerMiddleware(Configure::read('Error')))
|
80 |
| - |
| 87 | + ->add(new CspMiddleware([ |
| 88 | + 'script-src' => [ |
| 89 | + 'allow' => [ |
| 90 | + 'https://www.googletagmanager.com/', |
| 91 | + 'https://www.google.com/', |
| 92 | + 'https://www.gstatic.com/', |
| 93 | + 'https://connect.facebook.net/', |
| 94 | + 'https://platform.twitter.com/', |
| 95 | + ], |
| 96 | + 'self' => true, |
| 97 | + 'unsafe-inline' => true, |
| 98 | + 'unsafe-eval' => true, |
| 99 | + ], |
| 100 | + "upgrade-insecure-requests" => true, |
| 101 | + ])) |
| 102 | + ->add((new SecurityHeadersMiddleware()) |
| 103 | + ->setReferrerPolicy() |
| 104 | + ->setXFrameOptions() |
| 105 | + ->noOpen() |
| 106 | + ->noSniff()) |
| 107 | + ->add(function( |
| 108 | + ServerRequestInterface $request, |
| 109 | + RequestHandlerInterface $handler |
| 110 | + ): ResponseInterface { |
| 111 | + return $handler->handle($request) |
| 112 | + ->withHeader('Permissions-Policy', 'camera=(), geolocation=(), microphone=(), usb=()'); |
| 113 | + }) |
| 114 | + ->add(new HttpsEnforcerMiddleware([ |
| 115 | + 'hsts' => [ |
| 116 | + 'maxAge' => 600, |
| 117 | + 'includeSubDomains' => true, |
| 118 | + 'preload' => false, |
| 119 | + ], |
| 120 | + ])) |
81 | 121 | // Handle plugin/theme assets like CakePHP normally does.
|
82 | 122 | ->add(new AssetMiddleware([
|
83 | 123 | 'cacheTime' => Configure::read('Asset.cacheTime'),
|
|
0 commit comments