• v7.7.0 c718fe06de

    fix: A20 (partiel) — CSP nonce par requête, unsafe-inline sort de script-src (v7.7.0)
    FlowDeck CI / lint (push) Canceled after 0s
    FlowDeck CI / test (push) Canceled after 0s
    FlowDeck CI / docker (push) Canceled after 0s

    bruno released this 2026-10-01 10:41:39 -04:00 | 113 commits to main since this release

    • ContentSecurityPolicyMiddleware : nonce aléatoire par requête dans la
      ContextVar CSP_NONCE (posée avant call_next → visible des templates),
      script-src 'self' 'unsafe-eval' 'nonce-…' — plus aucun script inline
      sans nonce ne tourne (fin des XSS injectés en JS)
    • 38 tags <script> des templates : nonce="{{ csp_nonce() }}" (passage
      scripté, vérifié : 0 restant) ; LOCAL_LOGIN_HTML (constante de module) :
      helper _with_nonce() au rendu ; collections.py : 3 scripts Python
      (chart/form/map) noncés
    • <meta name="htmx-config" content='{"inlineScriptNonce": …}'> dans base.html
      htmx ré-injecte les <script> des réponses boostées avec le bon nonce
    • script-src-attr 'unsafe-inline' : les 74 handlers onclick= inline
      restent couverts (le nonce les aurait désactivés aussi)
    • chart.js (cdn.jsdelivr.net) et leaflet (unpkg) ajoutés à script-src/style-src
      vues chart/map déjà BLOQUÉES par la CSP depuis toujours
      (commentaire ponytail: upgrade = vendoriser puis retirer les hôtes)
    • reste d'A20 : unsafe-eval (Alpine x-data → @alpinejs/csp), externalisation
      JS (A27), resserrer img-src/connect-src

    test : test_csp_nonce_per_request (page base.html + page hors template,
    nonce unique par requête)

    suite 1037/1037 · ruff check app tests OK · docs à jour

    Downloads