Sécurité : supprimer toutes les violations CSP (scripts et styles inline) #95

Closed
opened 2026-05-16 09:31:10 +00:00 by cedricAbonnel · 0 comments
Owner

Contexte

Le header Apache Content-Security-Policy est défini dans varlog/server/apache/lan.acegrp.varlog.conf :

script-src 'self'          → scripts inline INTERDITS
style-src  'self' 'unsafe-inline'  → styles inline autorisés (mais à durcir)

Un audit du code révèle plusieurs violations actives ou potentielles listées ci-dessous.


Violations actives (script-src 'self' — bloquées aujourd'hui)

1. templates/comments_section.php:145<script> inline

Bloc JS inline qui préremplit le formulaire commentaire (nom/email) depuis les cookies. Bloqué par le CSP actuel — la fonctionnalité est donc cassée sur les sites qui appliquent ce CSP.

→ Déplacer dans un fichier public/assets/js/comments.js chargé via <script src="..." defer>.

2. templates/wizard/step6.php:29onclick inline avec confirm()

onclick="if(confirm('Abandonner les modifications…')) window.location='…'"

Double violation : handler inline (bloqué par script-src) et utilisation de confirm() (bloqué par default-src si on retire unsafe-inline un jour, et bloqué par certains navigateurs en mode strict). Le bug CSP du bouton « à la une » (commit fabe5a9) avait la même origine.

→ Remplacer par data-confirm-discard + listener dans admin.js (même pattern que data-confirm déjà implémenté ligne 2-5 de admin.js).

3. templates/post_confirm.php:119oninput inline

oninput="document.getElementById('slug-display').textContent=this.value"

Les attributs on* sont considérés comme des scripts inline par le CSP.

→ Déplacer dans un fichier JS dédié avec addEventListener('input', ...).


Violations potentielles (style-src — autorisées aujourd'hui via unsafe-inline)

Si on durcit un jour la directive style-src (en retirant unsafe-inline), les <style> inline suivants seront bloqués :

Fichier Ligne Contenu
templates/maintenance.php 7 styles de la page de maintenance
templates/wizard/nav.php 28 styles de navigation du wizard
templates/wizard/step5.php 130 styles spécifiques à l'étape 5
templates/wizard/step6.php 93 styles spécifiques à l'étape 6
templates/diff.php 66 styles du diff article
templates/post_confirm.php 246 styles de confirmation de publication

→ À terme, déplacer dans public/assets/css/ et ajouter unsafe-inline dans la liste des choses à supprimer.


Travail à faire

  • Extraire le JS de comments_section.phppublic/assets/js/comments.js
  • Remplacer le onclick/confirm() de wizard/step6.php par un data-* + listener dans admin.js
  • Remplacer le oninput de post_confirm.php par un addEventListener dans un fichier JS
  • (Optionnel / durcissement futur) Déplacer les <style> inline vers des fichiers CSS
  • Vérifier après chaque correction que le CSP ne génère plus d'erreur en console sur les pages concernées

Référence

Config CSP : varlog/server/apache/lan.acegrp.varlog.conf ligne 19.
Rule consignes.md : ne jamais écrire de <script> inline dans les templates.

## Contexte Le header Apache `Content-Security-Policy` est défini dans `varlog/server/apache/lan.acegrp.varlog.conf` : ``` script-src 'self' → scripts inline INTERDITS style-src 'self' 'unsafe-inline' → styles inline autorisés (mais à durcir) ``` Un audit du code révèle plusieurs violations actives ou potentielles listées ci-dessous. --- ## Violations actives (`script-src 'self'` — bloquées aujourd'hui) ### 1. `templates/comments_section.php:145` — `<script>` inline Bloc JS inline qui préremplit le formulaire commentaire (nom/email) depuis les cookies. **Bloqué par le CSP actuel** — la fonctionnalité est donc cassée sur les sites qui appliquent ce CSP. → Déplacer dans un fichier `public/assets/js/comments.js` chargé via `<script src="..." defer>`. ### 2. `templates/wizard/step6.php:29` — `onclick` inline avec `confirm()` ```html onclick="if(confirm('Abandonner les modifications…')) window.location='…'" ``` Double violation : handler inline (bloqué par `script-src`) **et** utilisation de `confirm()` (bloqué par `default-src` si on retire `unsafe-inline` un jour, et bloqué par certains navigateurs en mode strict). Le bug CSP du bouton « à la une » (commit fabe5a9) avait la même origine. → Remplacer par `data-confirm-discard` + listener dans `admin.js` (même pattern que `data-confirm` déjà implémenté ligne 2-5 de `admin.js`). ### 3. `templates/post_confirm.php:119` — `oninput` inline ```html oninput="document.getElementById('slug-display').textContent=this.value" ``` Les attributs `on*` sont considérés comme des scripts inline par le CSP. → Déplacer dans un fichier JS dédié avec `addEventListener('input', ...)`. --- ## Violations potentielles (`style-src` — autorisées aujourd'hui via `unsafe-inline`) Si on durcit un jour la directive `style-src` (en retirant `unsafe-inline`), les `<style>` inline suivants seront bloqués : | Fichier | Ligne | Contenu | |---------|-------|---------| | `templates/maintenance.php` | 7 | styles de la page de maintenance | | `templates/wizard/nav.php` | 28 | styles de navigation du wizard | | `templates/wizard/step5.php` | 130 | styles spécifiques à l'étape 5 | | `templates/wizard/step6.php` | 93 | styles spécifiques à l'étape 6 | | `templates/diff.php` | 66 | styles du diff article | | `templates/post_confirm.php` | 246 | styles de confirmation de publication | → À terme, déplacer dans `public/assets/css/` et ajouter `unsafe-inline` dans la liste des choses à supprimer. --- ## Travail à faire - [ ] Extraire le JS de `comments_section.php` → `public/assets/js/comments.js` - [ ] Remplacer le `onclick`/`confirm()` de `wizard/step6.php` par un `data-*` + listener dans `admin.js` - [ ] Remplacer le `oninput` de `post_confirm.php` par un `addEventListener` dans un fichier JS - [ ] (Optionnel / durcissement futur) Déplacer les `<style>` inline vers des fichiers CSS - [ ] Vérifier après chaque correction que le CSP ne génère plus d'erreur en console sur les pages concernées ## Référence Config CSP : `varlog/server/apache/lan.acegrp.varlog.conf` ligne 19. Rule consignes.md : ne jamais écrire de `<script>` inline dans les templates.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/folio#95