Es gibt inzwischen verschiedene CSP-Levels:
- Level 1 (2012, erste Umsetzung)
- Level 2 (2016, Erweiterung, u.a. Nonces und Hashes)
- Level 3 (aktuell Draft, wird von den Browsern aber schon gut unterstützt, u.a. strict-dynamic)
unsafe-inline wird von Browser, die Level 2 unterstützen (alle modernen Browser) ignoriert, wenn Hashes oder Nonce in der CSP zu der Direktive definiert sind.
Hashes manuell einzutragen kann problematisch sein, wenn sich Skripte/Styles ändern, dann muss man manuell ebenfalls die CSP ändern. Es wird aktuell an einem Patch in TYPO3 gearbeitet, so dass Hashes nativ unterstützt werden. Aktuell würde ich im TYPO3-Umfeld zu Nonces raten, da dies automatisch von TYPO3 eingebunden wird (sofern konfiguriert).
TYPO3 bietet Möglichkeiten, den CSP per Fluid (useNonce="1" im Asset-ViewHelper) oder PHP an die Tags anzuhängen, per TypoScript geschieht das automatisch mit den entsprechenden PAGE-Eigenschaften.
Wenn du nun strict-dynamic bei script-src(-elem) benutzt, müssen ebenfalls alle selbst eingebundenen Skripte Hashes oder Nonces haben. Damit hast du aber z.B. den Vorteil, dass wenn du Google Tag Manager & Konsorten lädst, werden alle anderen Skripte, die von diesem Skript nachgeladen werden, ebenfalls vertraut und benötigen keine Hashes und Nonces. Ob man einem US-Unternehmen jedoch heutzutage vertraut, muss jeder für sich selbst definieren.
Wenn du auf den Camps in Jena oder Hamburg bist: Da werde ich vermutlich zwei Sessions zu CSP halten (insgesamt 90 Minuten Druckbetankung) - sofern gewünscht und zeitlich möglich. Ansonsten findest du die Slides auch hier:
https://brotkrueml.dev/presentations/mtug2412/csp.html . Damit bekommt du schon mal einen guten Eindruck, was CSP ist und wie man das in TYPO3 konfiguriert.