From 53dbce5bb01417935564b58bcc1ca88b7d6dbeb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Fri, 15 May 2026 14:34:39 +0200 Subject: [PATCH] =?UTF-8?q?fix=20:=20gardes=20session=20OIDC=20+=20r=C3=A8?= =?UTF-8?q?gle=20PHP-FPM=20www-data=20(v1.6.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - oidc/start.php : arrêt immédiat (500) si session_start() échoue, évite un flux OIDC condamné à l'échec silencieux (ex. session.save_path absent) - oidc/callback.php : même garde + error_log sur échec du contrôle de state pour faciliter le diagnostic (STATE absent/présent + session_id) - consignes.md : règle PHP-FPM — toujours user=www-data, pas le compte admin Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 9 +++++++++ consignes.md | 5 +++-- public/oidc/callback.php | 8 ++++++++ public/oidc/start.php | 7 +++++++ public/version.txt | 2 +- 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d95493c..a8e8e01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnag --- +## [1.6.2] - 2026-05-15 + +### Corrigé +- `oidc/start.php` : garde explicite après `session_start()` — erreur 500 immédiate si `session.save_path` est inaccessible, évite un flux OIDC condamné à l'échec silencieux +- `oidc/callback.php` : même garde de session ; `error_log` en cas d'échec du contrôle de state pour faciliter le diagnostic +- `consignes.md` : règle ajoutée — pool PHP-FPM avec `user = www-data`, pas le compte admin personnel + +--- + ## [1.6.1] - 2026-05-15 ### Corrigé diff --git a/consignes.md b/consignes.md index 01205d5..d67544f 100644 --- a/consignes.md +++ b/consignes.md @@ -90,8 +90,8 @@ Chemin serveur : `varlog:/var/www/lan.acegrp.varlog/` ```bash cp /var/www/lan.acegrp.abonnel-www/.env /tmp/.env.bak -rm -rf /var/www/lan.acegrp.abonnel-www -git clone --depth=1 https://cedricAbonnel:TOKEN@git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www +sudo rm -rf /var/www/lan.acegrp.abonnel-www +git clone --depth=1 https://git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www cp /tmp/.env.bak /var/www/lan.acegrp.abonnel-www/.env cd /var/www/lan.acegrp.abonnel-www && composer install --no-dev --optimize-autoloader php database/migrate.php @@ -106,3 +106,4 @@ git -C /var/www/lan.acegrp.abonnel-www config user.name 'Cédrix' - Ne **jamais** écraser le `.env` serveur (ni scp, ni réécriture). Indiquer les variables à l'utilisateur pour qu'il les saisisse lui-même. - Ne **jamais** versionner `data/`, `.env`, ou `vendor/` dans le dépôt folio. - Toujours bumper la version **et** mettre à jour le changelog dans le même commit que la PR. +- Dans les pools PHP-FPM, toujours utiliser `user = www-data` / `group = www-data`. `cedrix` est un admin ordinaire, pas un compte de service. diff --git a/public/oidc/callback.php b/public/oidc/callback.php index a538cf6..549a168 100644 --- a/public/oidc/callback.php +++ b/public/oidc/callback.php @@ -39,7 +39,15 @@ if (!$OIDC_ISSUER || !$OIDC_CLIENT_ID || !$OIDC_REDIRECT_URI) { $tokenEndpoint = $OIDC_ISSUER . '/protocol/openid-connect/token'; $userInfoEndpoint = $OIDC_ISSUER . '/protocol/openid-connect/userinfo'; +if (session_status() !== PHP_SESSION_ACTIVE) { + error_log('[OIDC/callback] session_start() a échoué — vérifier session.save_path'); + http_response_code(500); + echo $debug ? 'Erreur de session (session.save_path inaccessible ?).' : 'Erreur interne.'; + exit; +} + if (!isset($_GET['state'], $_SESSION['oidc_state']) || !hash_equals((string)$_SESSION['oidc_state'], (string)$_GET['state'])) { + error_log('[OIDC/callback] State invalide — GET:' . ($_GET['state'] ?? 'absent') . ' SESSION:' . (isset($_SESSION['oidc_state']) ? 'présent' : 'absent') . ' session_id:' . session_id()); http_response_code(400); echo $debug ? 'State invalide.' : 'Requête invalide.'; exit; diff --git a/public/oidc/start.php b/public/oidc/start.php index fb823bd..ce1ca37 100644 --- a/public/oidc/start.php +++ b/public/oidc/start.php @@ -9,6 +9,13 @@ require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; require_once dirname(__DIR__, 2) . '/config/config.php'; require_once dirname(__DIR__, 2) . '/bootstrap.php'; +if (session_status() !== PHP_SESSION_ACTIVE) { + error_log('[OIDC/start] session_start() a échoué — vérifier session.save_path'); + http_response_code(500); + echo 'Erreur de session. Contactez l\'administrateur.'; + exit; +} + if (!function_exists('env')) { function env(string $key, ?string $default = null): ?string { diff --git a/public/version.txt b/public/version.txt index 9c6d629..fdd3be6 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.6.1 +1.6.2