perf : session lazy + CSRF cookie + 410 DokuWiki
Contexte : sur abonnel.fr, session_start() était appelé sur chaque
requête PHP (y compris bots), créant ~17 000 fichiers de session/jour
dans un répertoire custom non nettoyé par le cron Debian. Les workers
PHP-FPM grossissaient en mémoire et le pool saturait (1 188 erreurs
503 en 30 minutes).
Changements :
public/index.php
- session_start() uniquement si le cookie de session existe déjà ou si
la requête est POST. Les bots (GET sans cookie) ne créent plus de
session.
- CSRF commentaires migré de $_SESSION['comment_csrf'] vers un double-
submit cookie (_csrf_c, SameSite=Strict, HttpOnly). La session n'est
plus requise pour les visiteurs anonymes qui postent un commentaire.
templates/comments_section.php
- Génère le token CSRF et le pose en cookie (_csrf_c) au lieu de
l'écrire en session.
public/.htaccess
- Règle Apache 410 Gone pour toute URL contenant un paramètre ?do=
(anciens paramètres DokuWiki : do=media, do=export_pdf…). Traité par
Apache en 2ms sans toucher PHP-FPM.
public/oidc/{start,callback,me}.php
- Correction du bug introduit par 0b8077e : config.php (qui utilise
BASE_PATH) était chargé avant bootstrap.php (qui définit BASE_PATH).
Fix : define('BASE_PATH', …) ajouté avant le require config.php.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,13 @@ $_reactionDefs = [
|
||||
];
|
||||
|
||||
$_csrfToken = bin2hex(random_bytes(16));
|
||||
$_SESSION['comment_csrf'] = $_csrfToken;
|
||||
setcookie('_csrf_c', $_csrfToken, [
|
||||
'expires' => 0,
|
||||
'path' => '/',
|
||||
'secure' => !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off',
|
||||
'httponly' => true,
|
||||
'samesite' => 'Strict',
|
||||
]);
|
||||
?>
|
||||
|
||||
<?php if (!empty($alsoReadArticles ?? [])): ?>
|
||||
|
||||
Reference in New Issue
Block a user