Skip to content

Commit 318b81e

Browse files
authored
Merge pull request #367 from cakephp/feature/security-headers
Feature/security headers
2 parents 0cc3257 + 4569762 commit 318b81e

3 files changed

Lines changed: 173 additions & 6 deletions

File tree

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"league/flysystem": "^2.2",
2121
"linkorb/jsmin-php": "^1.0",
2222
"natxet/cssmin": "^3.0",
23-
"cakedc/cakephp-cached-routing": "^1.0"
23+
"cakedc/cakephp-cached-routing": "^1.0",
24+
"paragonie/csp-builder": "^2.9"
2425
},
2526
"require-dev": {
2627
"psy/psysh": "@stable",

composer.lock

Lines changed: 128 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Application.php

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,23 @@
1414
* @since 3.3.0
1515
* @license https://opensource.org/licenses/mit-license.php MIT License
1616
*/
17+
1718
namespace App;
1819

19-
use CakeDC\CachedRouting\Routing\Middleware\CachedRoutingMiddleware;
2020
use Cake\Core\Configure;
2121
use Cake\Core\ContainerInterface;
2222
use Cake\Error\Middleware\ErrorHandlerMiddleware;
2323
use Cake\Http\BaseApplication;
24-
use Cake\Http\MiddlewareQueue;
2524
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;
2629
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;
2734

2835
/**
2936
* Application setup class.
@@ -77,7 +84,40 @@ public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue
7784
// Catch any exceptions in the lower layers,
7885
// and make an error page/response
7986
->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' => false,
118+
'preload' => false,
119+
],
120+
]))
81121
// Handle plugin/theme assets like CakePHP normally does.
82122
->add(new AssetMiddleware([
83123
'cacheTime' => Configure::read('Asset.cacheTime'),

0 commit comments

Comments
 (0)