HTTP 403
HTTP-Statuscode für "Forbidden" — der Server versteht die Anfrage, verweigert aber die Ausführung wegen fehlender Berechtigung.
Aktualisiert: 23. Februar 2026
Was ist HTTP 403?
HTTP 403 ("Forbidden") ist ein Statuscode, den ein Webserver sendet, wenn er eine Anfrage versteht, aber die Ausführung verweigert — nicht wegen technischer Probleme, sondern wegen fehlender Berechtigung. Der entscheidende Unterschied zu HTTP 401 (Unauthorized): Bei 401 fehlt die Authentifizierung und der Client kann es mit Credentials erneut versuchen. Bei 403 ist die Autorisierung verweigert — auch mit gültiger Authentifizierung gibt es keinen Zugriff auf diese Ressource.
Für WordPress-Administratoren ist HTTP 403 einer der häufigsten Fehler bei der Arbeit mit REST APIs, Sicherheits-Plugins und Firewalls wie CrowdSec oder Fail2Ban. Ein 403 bedeutet nicht immer "der Benutzer hat keine Rechte" — er kann auch durch IP-Sperren, Firewall-Regeln oder Webserver-Konfiguration ausgelöst werden.
Kurzprofil
- Typ: HTTP-Statuscode (Client-Fehler, 4xx-Klasse)
- Vollständig: 403 Forbidden
- Spezifikation: RFC 9110, Section 15.5.4
- Unterschied zu 401: 401 = nicht authentifiziert; 403 = authentifiziert, aber nicht autorisiert
- Relevanz für WordPress/Web: Sehr hoch
Wie funktioniert HTTP 403?
Der Webserver oder eine vorgelagerte Komponente (Reverse Proxy, WAF, Firewall) entscheidet anhand von Regeln, ob eine Anfrage ausgeführt werden darf. Dabei spielen mehrere Ebenen eine Rolle:
Ebene 1 — Webserver (Nginx/Apache): Datei-Permissions, deny-Direktiven, auth_basic, oder Directory-Listings-Sperren. Eine 403-Antwort von Nginx bei /wp-admin/ bedeutet typischerweise eine IP-Whitelist-Regel.
Ebene 2 — Reverse Proxy / WAF: Tools wie Traefik mit CrowdSec-Middleware, ModSecurity oder Cloudflare WAF können 403er erzeugen, bevor die Anfrage überhaupt den Webserver erreicht. Diese 403er sind schwerer zu debuggen, weil WordPress-Logs nichts zeigen.
Ebene 3 — Applikation (WordPress): Die REST API gibt 403 zurück, wenn ein Nonce fehlt oder ungültig ist, wenn ein Benutzer nicht die erforderlichen Capabilities hat, oder wenn ein Plugin den Zugriff explizit sperrt.
HTTP 403 in der Praxis
Bei WordPress tritt 403 in typischen Szenarien auf:
REST API Nonce-Problem:
// Falsch: Kein Nonce mitgesendet
fetch('/wp-json/wp/v2/posts', { method: 'POST', ... })
// Richtig:
fetch('/wp-json/wp/v2/posts', {
method: 'POST',
headers: { 'X-WP-Nonce': wpApiSettings.nonce },
...
})
CrowdSec-Blockierung: Wenn eine IP-Adresse wegen Verdacht auf Brute-Force oder Port-Scanning in der CrowdSec-Blocklist landet, antworten alle Anfragen dieser IP mit 403 — unabhängig von WordPress-internen Rechten. Diagnose:
docker exec crowdsec cscli decisions list | grep <IP>
Datei-Permissions: Eine wp-config.php mit zu offenen Rechten (z.B. 0666 statt 0640) kann Webserver-Sicherheitsregeln auslösen, die den Zugriff auf das gesamte Verzeichnis mit 403 blockieren.
Das Wichtigste
- 403 = Zugriff verweigert (nicht: technischer Fehler oder fehlende Authentifizierung)
- Kann auf mehreren Ebenen entstehen: Firewall, Reverse Proxy, Webserver, Applikation
- Bei WordPress-REST-API: häufig fehlendes oder abgelaufenes Nonce
- Bei Produktionsservern: oft IP-Blockierungen durch Sicherheits-Middleware (CrowdSec, Fail2Ban)
- Unterschied zu 401: 403 kann nicht durch Einloggen gelöst werden
Was passiert wenn 403 falsch behandelt wird?
Ein 403 der stumm ignoriert wird, kann massive Probleme verursachen: WordPress-Plugins, die REST-API-Calls intern machen, scheitern ohne Fehlermeldung. Cron-Jobs, die per HTTP-Ping ausgelöst werden, werden blockiert. Außerdem indiziert Google Seiten, die dauerhaft 403 zurückgeben, nicht — ein fälschlich gesperrtes Verzeichnis kann SEO-Schäden verursachen.
Ein häufiger Fehler: Entwickler sehen 403 bei API-Calls und vermuten einen Berechtigungsfehler in WordPress — während tatsächlich eine CrowdSec-Regel die Anfrage blockiert. Das Debugging-Niveau ist dann falsch angesetzt.
Häufige Fragen
Wann sollte ein Server 403 statt 404 zurückgeben? Nach RFC 9110 wenn die Ressource existiert, aber der Zugriff verweigert ist. 404 (Not Found) ist dann angebracht, wenn man aus Sicherheitsgründen die Existenz einer Ressource verschleiern möchte — ein üblicher Ansatz bei Admin-Bereichen.
Wie debugge ich einen 403 bei WordPress-REST-API?
Schrittweise von außen nach innen: 1) Firewall-Logs prüfen (CrowdSec/Fail2Ban), 2) Webserver-Error-Log, 3) Nginx/Apache-Konfiguration, 4) WordPress-Debug-Log mit WP_DEBUG=true, 5) Nonce-Gültigkeit prüfen.
Kann ein 403 durch Browser-Caching entstehen?
Ja. Wenn ein 403 versehentlich mit Cache-Control: max-age=3600 ausgeliefert wurde, speichert der Browser die Antwort. Lösung: Hard Refresh (Ctrl+Shift+R) oder Cache leeren.
Verwandte Begriffe
CORS · CrowdSec