fix : gardes session OIDC + règle PHP-FPM www-data (v1.6.2)

- 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 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 14:34:39 +02:00
parent 7737edf402
commit 53dbce5bb0
5 changed files with 28 additions and 3 deletions
+9
View File
@@ -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é
+3 -2
View File
@@ -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.
+8
View File
@@ -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;
+7
View File
@@ -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
{
+1 -1
View File
@@ -1 +1 @@
1.6.1
1.6.2