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
  • +