HTTP CSP script-src Directive

Die Content-Security-Policy script-src Direktive ist die kritischste CSP-Direktive zur XSS-Prävention. Sie kontrolliert erlaubte Quellen für JavaScript via <script> Tags, Event-Handler und javascript: URLs. Durch Nonce- oder Hash-basierte Whitelists verhindert sie Cross-Site-Scripting-Angriffe selbst bei injiziertem HTML.

Typ

CSP Fetch-Direktive

Syntax

Die Direktive unterstützt Quell-Whitelists, Nonces und Hashes für granulare Script-Kontrolle.

http
Content-Security-Policy: script-src 'self'
Content-Security-Policy: script-src 'self' 'nonce-2726c7f26c'
Content-Security-Policy: script-src 'self' 'sha256-xyz...'

Direktiven

Die script-src Direktive bietet die umfangreichsten CSP-Optionen für maximale Sicherheit.

'none'
Verbietet alle Scripts. Nur für statische HTML-Seiten ohne JavaScript verwendbar.
'self'
Erlaubt Scripts nur vom gleichen Origin. Verhindert externe Script-Injection.
'nonce-{base64}'
Nonce-basiertes Whitelisting. Jedes erlaubte Script erhält eindeutigen Nonce-Wert im Tag.
'sha256-{hash}'
Hash-basiertes Whitelisting. Inline-Scripts werden via SHA-256-Hash ihrer Inhalte erlaubt.
'strict-dynamic'
Ermöglicht dynamisch geladene Scripts von vertrauenswürdigen Scripts. Modern best-practice mit Nonces.
'unsafe-inline'
Erlaubt inline Scripts. UNSICHER sollte vermieden werden. Nur für Legacy-Migration.
'unsafe-eval'
Erlaubt eval() und ähnliche Code-Generation. UNSICHER sollte vermieden werden.
https://trusted-cdn.com
Domain-Whitelisting. Erlaubt Scripts von spezifischen CDNs.

Beispiele

Nachfolgend finden Sie praktische Anwendungsbeispiele für die script-src Direktive.

Beispiel 1 Nonce-basierte XSS-Prävention

http
HTTP/1.1 200 OK
Content-Security-Policy: script-src 'self' 'nonce-Nc3n83cnSAd3wc3Sasdfn939hc3'

<!DOCTYPE html>
<html>
<head>
  <script nonce="Nc3n83cnSAd3wc3Sasdfn939hc3">
    // Erlaubt: Nonce stimmt überein
    console.log('Trusted inline script');
  </script>

  <script src="/app.js"></script>
  <!-- Erlaubt: Self-hosted -->

  <script>
    // Blockiert: Kein Nonce
    alert('XSS Attack!');
  </script>
</head>
</html>

Beispiel 2 Strict-Dynamic für moderne SPAs

http
Content-Security-Policy: script-src 'nonce-xyz123' 'strict-dynamic'

<!-- Bootstrap-Script mit Nonce -->
<script nonce="xyz123">
  // Dieses Script ist vertrauenswürdig

  // Dynamisch geladene Scripts sind erlaubt
  const script = document.createElement('script');
  script.src = '/dynamically-loaded.js';
  document.head.appendChild(script);
  // Erlaubt durch strict-dynamic
</script>

<!-- Injiziertes Script ohne Nonce -->
<script>alert('XSS')</script>
<!-- Blockiert: Kein Nonce -->

Beispiel 3 Hash-basierte Inline-Script-Whitelisting

http
Content-Security-Policy: script-src 'self' 'sha256-xyz...'

<script>
  // Exact script muss SHA-256 hash match
  console.log('Trusted content');
</script>
<!-- Erlaubt wenn Hash korrekt -->

<script>
  // Jede Änderung ändert Hash
  console.log('Trusted content modified');
</script>
<!-- Blockiert: Hash stimmt nicht überein -->

XSS Prevention Flow

CSP script-src verhindert Cross-Site-Scripting-Angriffe

Vorteile für die Systemarchitektur

  • XSS-Eliminierung: Verhindert praktisch alle XSS-Angriffe durch strikte Kontrolle erlaubter JavaScript-Quellen via Nonce- oder Hash-Whitelisting
  • Defense-in-Depth: Schützt selbst bei HTML-Injection-Schwachstellen da injizierte Scripts ohne korrekten Nonce nicht ausgeführt werden
  • Zero-Trust-JavaScript: Strict-Dynamic-Policy ermöglicht moderne Zero-Trust-Architektur wo nur Bootstrap-Scripts vertrauenswürdig sind

Spezifikation

Content Security Policy Level 3 – W3C Working Draft https://www.w3.org/TR/CSP3/#directive-script-src

Weitere Spezifikationen

CSP script-src-attr, CSP script-src-elem, CSP default-src Directive