Was ist ein Content-Security-Policy-Nonce?

Antwort vom

**Ein CSP-`nonce` ist ein pro HTTP-Antwort neu erzeugter Zufallswert, der genau die `<script>`- oder `<style>`-Tags freischaltet, die diesen Wert tragen; damit blockierst du fremd eingeschleusten Inline-Code und reduzierst XSS deutlich.** ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/nonce)) ## So funktioniert es Der Server setzt im `Content-Security-Policy`-Header einen Wert wie `'nonce-XYZ'` in `script-src` oder `style-src`. Genau derselbe Wert muss dann im HTML als `nonce`-Attribut an den erlaubten Tags stehen. Alles andere wird vom Browser verworfen. ([developer.mozilla.org](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/nonce)) ```http Content-Security-Policy: script-src 'nonce-r4nd0m123' ``` ```html <script nonce="r4nd0m123"> console.log('erlaubt'); </script> ``` Ein eingeschleustes Script ohne passenden Nonce läuft dann nicht. Genau das ist der praktische Vorteil gegenüber „inline einfach erlauben“. ([cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)) ## Wichtig, was oft falsch gemacht wird Der Nonce muss **pro Response neu**, **kryptografisch zufällig** und **nicht wiederverwendet** sein. Wenn du denselben Wert dauerhaft nutzt, verlierst du den Sicherheitsgewinn praktisch wieder. ([cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)) Ebenso wichtig: Du darfst Nonces nicht blind per Middleware in alle Script-Tags hineinschreiben. Sonst bekommen im schlimmsten Fall auch injizierte Tags einen gültigen Nonce. OWASP weist genau davor ausdrücklich hin. ([cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)) ## Nonce vs. Hash Ein `nonce` passt besser zu dynamisch erzeugtem HTML mit wenigen erlaubten Inline-Skripten. Ein Hash passt besser, wenn ein Inline-Skript statisch ist und sich nicht ändert. Schon eine kleine Änderung im Script, sogar Whitespace, macht den Hash ungültig. Das ist der entscheidende Praxisunterschied. ([cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)) ## Klare Empfehlung Wenn du heute CSP sauber einführen willst, ist ein **striktes CSP mit Nonce plus `strict-dynamic`** meist die robustere Lösung als lange Domain-Allowlisten. Genau das wird in aktuellen Sicherheitsleitfäden als führende Praxis beschrieben. ([cheatsheetseries.owasp.org](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html))

Kategorie: Technik Tags: Content Security Nonce