SSO (Single Sign-On) bedeutet: einmal einloggen, überall angemeldet sein. Hinter jedem "Mit Google anmelden" oder "Mit Microsoft anmelden" steckt entweder SAML oder OIDC. SAML vs. OIDC SAML 2.0 (Security Assertion Markup Language): XML-basiert, Unternehmensstandard, komplex. Findet sich bei Salesfor…
XSS-Schwachstellen sind einfach zu verhindern wenn man konsequent escapet. Trotzdem passieren sie — durch Vergessen, durch Third-Party-Code, durch Rendering-Edge-Cases. Content Security Policy ist die zweite Verteidigungslinie. Was CSP macht CSP sagt dem Browser per HTTP-Header welche Quellen für Sc…
APIs haben externe Abhängigkeiten. Wenn man einen Endpunkt ändert bricht man möglicherweise alle Clients die ihn nutzen. Das richtig zu handhaben ist eine Frage des Respekts gegenüber den API-Konsumenten. Was ein Breaking Change ist Felder entfernen oder umbenennen Typ eines Feldes ändern (string → …
API-Dokumentation die manuell gepflegt wird ist meistens veraltet. Irgendjemand hat einen Endpunkt geändert und die Doku nicht aktualisiert. Das findet man heraus wenn ein anderes Team sich beschwert. Was OpenAPI ist OpenAPI (früher Swagger) ist ein Standard für die Beschreibung von HTTP-APIs in YAM…
Hetzner hat eine saubere REST-API mit der man Server, Firewalls, DNS und mehr per Script verwalten kann. Praktisch für automatisierte Setups oder wenn man mal schnell einen Server hochziehen will. API-Token erstellen In der Hetzner Cloud Console unter Security → API Tokens einen neuen Token mit Read…
Webhooks sind HTTP-Requests die ein fremder Server an einen eigenen Endpunkt schickt. Das Problem: jeder kann solche Requests schicken. Ohne Validierung verarbeitet man möglicherweise gefälschte Daten. Signatur-Validierung Die meisten Webhook-Anbieter (GitHub, Stripe, Shopify) signieren ihre Request…
Wer PHP-APIs baut muss sie irgendwann auch von der anderen Seite bedienen. Die Fetch API ist der moderne Standard — kein jQuery, kein XMLHttpRequest. Grundstruktur gibt ein Promise zurück. Mit wartet man auf das Ergebnis. Das braucht in der umgebenden Funktion. POST-Request mit JSON-Body Fehlerbehan…
Zwei Einstellungen die bei jedem Nginx-Server aktiviert sein sollten und kaum Aufwand kosten. Gzip-Komprimierung Komprimiert Antworten bevor sie an den Browser geschickt werden. Spart Bandbreite und macht die Seite schneller. In der im -Block eintragen. verhindert dass winzige Dateien komprimiert we…
Webhooks sind HTTP-Callbacks die ein Dienst aufruft wenn etwas passiert. GitHub schickt einen beim Push, Stripe bei einer Zahlung, Telegram bei einer Nachricht. Das Empfangen ist einfach, die Signatur zu prüfen ist wichtig. Grundstruktur GitHub-Signatur prüfen GitHub signiert jeden Webhook mit einem…
OAuth 2.0 ist das Protokoll hinter "Mit Google anmelden" und allen vergleichbaren Flows. Es ist nicht besonders komplex — aber die Terminologie verwirbelt den Einstieg. Was OAuth löst Früher: eine App will auf GitHub-Repositories zugreifen → der Benutzer gibt sein GitHub-Passwort der App. Die App ha…
cURL ist in PHP der Standardweg um HTTP-Requests abzusetzen. Die rohe cURL-API ist aber umständlich. Eine kleine Wrapper-Funktion macht das deutlich angenehmer. GET-Request POST mit JSON Mit Bearer Token Für einfache API-Integrationen reicht das vollständig aus. Wer komplexere Anforderungen hat etwa…
Cookie-Consent-Banner sind meistens schlecht umgesetzt. Entweder technisch falsch oder so gestaltet dass sie Benutzer zermürben bis sie alles akzeptieren. Beides ist keine gute Lösung. Was tatsächlich Consent braucht Nicht alle Cookies brauchen Zustimmung. Technisch notwendige Cookies — Session-ID, …
TOTP (Time-based One-Time Password) ist der Standard hinter Google Authenticator, Authy und Co. Das Protokoll ist offen und in PHP ohne externe Bibliothek implementierbar. Wie es funktioniert Server und Client teilen einen geheimen Key. Beide berechnen aus dem Key und der aktuellen Zeit (in 30-Sekun…
Eine Sammlung von .htaccess Einträgen die ich regelmäßig brauche und immer wieder nachschlage. Nichts Exotisches, aber nützlich. Direkten Zugriff auf Verzeichnisse verbieten Bestimmte Dateien von außen sperren www auf non-www umleiten HTTP auf HTTPS erzwingen Clean URLs: /seite/slug statt ?page=seit…
JSON Web Tokens sind überall. Viele nutzen sie ohne wirklich zu verstehen wie sie funktionieren. Das rächt sich wenn man die Sicherheit falsch einschätzt. Aufbau Ein JWT besteht aus drei Base64url-kodierten Teilen getrennt durch Punkte. Header enthält Algorithmus und Typ. Payload enthält die Claims.…
API-Keys sind oft das schwächste Glied in einer Anwendung. Einmal ausgestellt und dann jahrelang in einem .env vergessen. Hier wie man es besser macht. Key generieren 64 Zeichen hex — ausreichend Entropie für einen API-Key. Key speichern Den Key niemals im Klartext speichern — nur den Hash. Key vali…
Eine gut designte API macht das Leben von jedem der sie nutzt einfacher. Hier die Grundregeln die ich selbst konsequent anwende. URLs Ressourcen-Namen im Plural, keine Verben in der URL. Verschachtelte Ressourcen wo es Sinn macht. Keine Verben. HTTP-Statuscodes Fehler-Response einheitlich Versionier…
Das ganze ist eine bekannte Schwachstelle in Wordpress und mann kann dies natürlich auch mit weiteren Wordpress Plugins umgehen aber das ist relativ Ressourcenfressend da Wordpress sowieso schon total vollgemüllt ist. So kann man auch auf Serverebene dagegen vorgehen. Schritt #1: IPTables nutzen Sch…
Um bestimmte Daten vor dem automatischen Auslesen von Spambots zu schützen kann man sich mit dieser kleinen netten Funktion behelfen. Geplant war es um Email Adressen im Quelltext der Seite unleserlich zu machen aber das ganze funktioniert auch ganz einfach mit anderen Informationen. Im Quelltext de…