From 5e701736174be600a4706b88c21f191fb4dc22b2 Mon Sep 17 00:00:00 2001 From: Pavel Stratil Date: Wed, 4 Dec 2019 01:29:01 +0000 Subject: [PATCH] add samesite csrf protection to sessionMiddleware, csp + cors middleware --- README.md | 5 ++++ composer.json | 6 +++-- glued/Core/Middleware/SessionMiddleware.php | 19 ++++++++++++++ glued/Core/Views/signup.twig | 1 - glued/Core/Views/templates/default.twig | 7 ++++++ glued/Mail/Controllers/MailController.php | 27 ++++++++++++++++++++ glued/Mail/Views/opera.twig | 21 ++++++++++++++++ glued/Mail/routes.php | 13 ++++++++++ glued/container.php | 5 +++- glued/middleware.php | 28 +++++++++++++++++---- glued/settings.dist.php | 10 +++++--- 11 files changed, 130 insertions(+), 12 deletions(-) create mode 100644 glued/Mail/Controllers/MailController.php create mode 100644 glued/Mail/Views/opera.twig create mode 100644 glued/Mail/routes.php diff --git a/README.md b/README.md index a36caf8c..97e20c2b 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,11 @@ The glue that keeps stuff together in Glued. To all microservices, core provides - content-addressable file storage (CAS) - internationalization - assets management and caching +- (some of the) security + - CSRF prevention (session cookie) via the SessionMiddleware; + - TODO / CSRF prevention (other cookies) - hack this https://github.com/selective-php/samesite-cookie/blob/master/src/SameSiteCookieMiddleware.php + - CSP prevention + - XSS prevention ### Spider diff --git a/composer.json b/composer.json index 103d45d2..b5ec5837 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,6 @@ "php": "^7.3", "slim/slim": "^4.3", "slim/twig-view": "3.0.0-beta", - "slim/csrf": "^1.0.0", "slim/flash": "^0.4.0", "slim/http": "^0.8", "nyholm/psr7": "^1.1", @@ -50,7 +49,10 @@ "granam/czech-vocative": "^2.0", "dfridrich/ares": "^1.2", "spatie/browsershot": "^3.33", - "google/apiclient": "^2.4" + "google/apiclient": "^2.4", + "php-imap/php-imap": "^3.0", + "tuupola/cors-middleware": "^1.1", + "middlewares/csp": "^3.0" }, "scripts": { "start": "php -S localhost:8080 -t public", diff --git a/glued/Core/Middleware/SessionMiddleware.php b/glued/Core/Middleware/SessionMiddleware.php index e6faa111..828646b1 100644 --- a/glued/Core/Middleware/SessionMiddleware.php +++ b/glued/Core/Middleware/SessionMiddleware.php @@ -9,6 +9,13 @@ */ final class SessionMiddleware implements MiddlewareInterface { + + protected $settings; + public function __construct($settings) + { + $this->settings = $settings; + } + /** * Invoke middleware. * @@ -20,6 +27,18 @@ final class SessionMiddleware implements MiddlewareInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { if (session_status() !== PHP_SESSION_ACTIVE) { + + if (ini_get('session.use_cookies')) { + $ini_defs = session_get_cookie_params(); + } + session_set_cookie_params([ + 'lifetime' => $this->settings['glued']['session_cookie_lifetime'], + 'path' => $ini_defs['path'], + 'domain' => $ini_defs['domain'], + 'secure' => $this->settings['glued']['session_cookie_secure'], + 'httponly' => $this->settings['glued']['session_cookie_httponly'], + 'samesite' => $this->settings['glued']['session_cookie_samesite'], + ]); session_start(); } $response = $handler->handle($request); diff --git a/glued/Core/Views/signup.twig b/glued/Core/Views/signup.twig index 2152f0ae..29ec2693 100644 --- a/glued/Core/Views/signup.twig +++ b/glued/Core/Views/signup.twig @@ -36,7 +36,6 @@ diff --git a/glued/Core/Views/templates/default.twig b/glued/Core/Views/templates/default.twig index e2d43695..f794e530 100644 --- a/glued/Core/Views/templates/default.twig +++ b/glued/Core/Views/templates/default.twig @@ -91,6 +91,13 @@
  • Statistics
  • +