Der wöchentliche Security-Sweep der Kanzlei-Website
Klassische Annahme bei Websites: einmal gebaut, dann läuft sie. Im Marketing fühlt sich das richtig an, technisch ist es nachweislich falsch. Eine Website ist kein Bild an der Wand — sie ist ein lebendes System, eingebettet in eine Infrastruktur, die sich ständig verändert: Abhängigkeiten bekommen Sicherheits-Updates, Hosting-Plattformen passen Defaults an, Browser verschärfen Pflicht-Header, neue Compliance-Anforderungen erscheinen. Ohne strukturierte Wartung kumuliert eine Site stille Probleme. Dieser Artikel zeigt, wie wir auf fahoch2.de einen wöchentlichen Security-Sweep als CI-Routine etabliert haben — vier Stufen, etwa eine Stunde pro Woche, kein Drama. Und am Schluss: wie sich diese vier Stufen für eine Kanzlei-Website mit niedriger Änderungs-Frequenz zu drei Quartals-Fragen verdichten.
Was Sie aus diesem Artikel mitnehmen
- Warum eine Website ein lebendes System ist (drei reale Beispiele aus 2024–2026)
- Welche vier Stufen unser wöchentlicher Security-Sweep prüft
- Wie sich das für eine Kanzlei-Website mit niedriger Änderungs-Frequenz auf drei Quartals-Fragen verdichtet
- Welche operativen Beleg-Tools wir auf fahoch2.de dafür einsetzen
Würdigung — eine Website ist ein lebendes System
Eine fertig gebaute Website fühlt sich an wie ein Produkt: Sie steht, sie funktioniert, sie ist abgenommen. Genauso wird sie oft verkauft — als einmalige Investition, danach „nur" gelegentliche Inhalts-Updates. Das Bild ist verständlich, aber strukturell falsch. Eine Website ist nicht ein Bild an der Wand; sie ist ein lebendes System, eingebettet in eine Infrastruktur, die sich permanent verändert: NPM-Pakete bekommen Sicherheits-Patches, Hosting-Plattformen ändern Default-Header, Browser verschärfen Pflicht-Standards, neue Compliance-Anforderungen erscheinen, Drittanbieter modifizieren ihre Verhaltensweise.
Wer eine Website ohne strukturierte Wartung betreibt, kumuliert stille Probleme. Sie sind selten dramatisch — meist klein, manchmal aber teuer. Die Frage ist nicht ob, sondern wann. Strukturelle Wartung verschiebt den Zeitpunkt der Entdeckung von „irgendwann" auf „nächsten Montag".
Hinweis:
Wenn Sie wissen wollen, ob Ihre aktuelle Site die offensichtlichen Wartungs-Marker erfüllt (CMS-Version, Plugin-Pflege, Security-Header), ordnet unser kostenfreier URL-Audit das in 90 Sekunden ein.
Drei Beispiele, die niemand auf der Rechnung hatte
Drei reale Vorfälle aus den letzten zwei Jahren, an denen eine wartungs-fern betriebene Website still gelitten hat — ohne dass jemand eine Wartungsrechnung dafür bekommen hätte:
- Die xz-Utils-Backdoor (März 2024, CVE-2024-3094). Ein über Jahre gepflegtes Linux-Werkzeug, auf dem mittelbar fast jeder Web-Server der Welt aufsetzt, wurde von einem böswilligen Maintainer mit einer Backdoor versehen. Entdeckt wurde der Fund durch einen Microsoft-Entwickler, der bei der Performance-Analyse eines SSH-Tools eine merkwürdige CPU-Last bemerkte. Sites, deren Build-Pipelines die betroffene Version eingespielt hatten, brauchten innerhalb von Stunden ein Update. Ohne automatisierte Dependency-Routine wäre das Problem unbemerkt geblieben.
- Stille Default-Anpassungen bei Hosting-Plattformen. Anbieter wie Vercel oder Netlify schärfen regelmäßig ihre Default-Konfigurationen nach — Cache-Control-Header, SameSite-Cookie-Defaults, CSP-Empfehlungen. Die Änderungen stehen im Changelog, aber niemand liest das wöchentlich. Effekte reichen von subtilen Caching-Problemen bis zu sichtbaren Layout-Veränderungen, je nach Site.
- Verschärfung von Bot-Detection bei CDN-Anbietern. Cloudflare und andere CDN-Betreiber justieren ihre Bot-Erkennungs-Regeln mehrmals pro Jahr. Ein automatisierter Sicherheits-Scanner, der gestern noch durchgelaufen ist, wird heute geblockt — und die eigene Site fällt dann aus der Routine-Prüfung raus, ohne dass der Site-Betreiber das bemerkt.
Keines dieser Ereignisse stand in einer Wartungsrechnung — aber sie alle hatten Auswirkungen, die jemand prüfen musste. Dieser „jemand" ist die strukturierte Wartung.
Stufe 1: Dependency-Check
Die erste wöchentliche Prüfung schaut auf die Abhängigkeiten, von denen die Site lebt. Konkret läuft npm audit --omit=dev --json über die produktiv eingesetzten NPM-Pakete und meldet bekannte CVEs. Parallel werden alle Major-Updates der letzten 7 Tage aufgelistet — auch wenn keine Sicherheits-Lücke gemeldet ist, sind Major-Sprünge ein Grund zum Hinschauen.
Diese Stufe ist eine bewusste Dopplungs-Schicht zu Dependabot: Dependabot legt Pull-Requests für offene CVEs an, der Sweep prüft, ob diese PRs wirklich gemerged sind, und ob es Funde gibt, die Dependabot nicht erkennt (z. B. transitive Abhängigkeiten in Lock-Files). Belt-and-suspenders — die Kosten der Dopplung sind null, der Nutzen ist nachweislich.
Stufe 2: Security-Header-Check
Die zweite Prüfung adressiert die Auslieferungs-Schicht: Welche Security-Header liefert die Site aktuell aus, und sind sie noch wie konfiguriert? Die Prüfung läuft zweistufig:
- Konfigurations-Soll aus
next.config.tseinlesen und gegen den dort definierten Bestand abgleichen — fehlt ein Header, wird das gemeldet. - Externes Live-Test als Empfehlung über securityheaders.com oder Mozilla Observatory — beide vergeben eine Note (A bis F), die unser Soll-Wert „mindestens A" sein soll.
Hier fängt die Routine die häufigsten Drifts: ein nachträglich eingefügter Header wurde im falschen Block deklariert; eine CSP-Direktive wurde versehentlich relaxed; ein Hosting-Default überschrieb eine eigene Regel. Alles selten dramatisch, aber konsistent zu finden.
Stufe 3: Code-Pattern-Scan
Die dritte Prüfung schaut auf den Code selbst — nicht nach Bugs, sondern nach bekannten Risiko-Mustern. Pro Sweep läuft ein grep gegen das Repository nach:
dangerouslySetInnerHTML— React-Setze für rohen HTML-Inhalt. Jeder Fund braucht eine Begründung im Code-Kommentar.eval(,new Function(,document.write(— JavaScript-Konstrukte, die fast nie ihre Verwendung in einem modernen Stack rechtfertigen.- Hardcoded API-Keys in Pattern-Form:
sk-,pk_live,AKIA,ghp_und ähnliches. Selbst wenn der Key später in einer Env-Variable landet, hinterlässt ein versehentlicher Push einen Treffer in der Git-History. - Server-Actions ohne Zod-Schema (oder ohne andere strikte Input-Validierung) — eine Server-Action ohne Validation ist eine offene Tür.
Die Scans laufen über grep/ripgrep mit fest definierten Regeln. False positives gibt es — sie werden im Sweep-Report als „erwartet, freigegeben" markiert. Was zählt, sind die echten neuen Treffer, die nicht in der Freigabe stehen.
Stufe 4: Compliance-Drift
Die vierte Prüfung schaut auf die Konsistenz zwischen rechtlich/operativ deklarierten Aussagen und der echten technischen Realität:
.env.examplevs Code. Wenn der Code eine neue Env-Variable nutzt, sollte sie in der Beispiel-Datei als Platzhalter stehen. Sonst hat der nächste Onboarding-Lauf eine Lücke.- Neue Tracker/CDN-Pattern. Per Pattern-Scan wird geprüft, ob neue Drittanbieter-Skripte oder CDN-Endpunkte aufgetaucht sind, die in der Datenschutzerklärung noch nicht stehen.
- DSE-Sub-Dienstleister vs reale Code-Aufrufe. Die Datenschutzerklärung benennt Sub-Dienstleister (z. B. Resend für Mail, Upstash für Rate-Limit). Wenn ein Code-Pfad einen weiteren Anbieter aufruft, der nicht in der DSE steht, ist das ein Compliance-Befund. Tiefer dazu: Soll-Ist-Drift bei der DSE.
Stufe 4 ist die operative Brücke zwischen Code und Rechtsdoku — die, die ohne strukturierte Prüfung am schnellsten aus dem Takt gerät.
Drei Quartals-Fragen für Kanzleien
Eine Kanzlei-Site ist meist eine andere Sorte System als eine schnell-entwickelnde Web-App: niedrigere Änderungs-Frequenz, weniger Code-Bewegung, fokussiertes Funktions-Set. Für solche Sites verdichten sich die vier Sweep-Stufen sinnvoll zu drei Quartals-Fragen, die intern (oder im Quartals-Call mit dem Dienstleister) beantwortbar sein müssen:
- Wann hat CMS/Page-Builder zuletzt ein Sicherheits-Update gefahren? Gibt es ein Plugin, das nicht mehr gepflegt wird (kein Update seit über 12 Monaten)? Antwort als Datum und Plugin-Name dokumentiert.
- Liefert die Seite securityheaders.com mindestens Note A? Der Test dauert eine Minute, das Ergebnis ist eine objektive Schranke. Wenn die Note unter A liegt, ist eine Erklärung (oder ein Behebungs-Plan) Pflicht.
- Stimmt die DSE noch mit den real eingesetzten Diensten überein? Konkret: Welche Drittanbieter werden im Quelltext gefunden? Steht jeder davon in der Datenschutzerklärung? Wenn nein: korrigieren — sonst ist die DSE veraltet und abmahnbar.
Diese drei Fragen sind weder vollständig (das ist die CI-Routine) noch ein Ersatz für eine professionelle Bewertung — aber sie sind das Minimum, das eine Kanzlei selbst (oder die hauseigene IT-Verantwortliche) quartalsweise prüfen kann.
Wie wir es bauen
Bei jedem Mandanten-Boost-Projekt richten wir den wöchentlichen Sweep als Cloud-Routine ein — ein Cron-getriebener Job, der montags früh läuft und einen strukturierten Report per Mail liefert. Im fahoch2.de-Repo flankieren mehrere Skripte den Sweep operativ:
scripts/check-go-live.mjs— Reality-Check der Go-Live-Checkliste vor jedem Briefing.scripts/lint-dse-consistency.mjs— DSE-Konsistenz-Linter als Drift-Sperre zwischen Datenschutz-Seite und Code-Referenzen.scripts/lint-voice.mjs— Voice-Linter inkl. gitcheckter Hash-Blocklist gegen interne Namen..github/dependabot.yml— Dependabot mit Minor+Patch automatisch, Major manuell..husky/pre-push— Test-Lauf vor jedem Push, als zweite Verteidigungs-Linie.
Die Cloud-Routine selbst läuft auf einer Cron-getriebenen Infrastruktur mit dem Eintrag „Montag 07:00 Berlin" und liefert einen einzelnen, scanbaren Sweep-Report ins Mail-Postfach. Im Ergebnis: eine Stunde pro Woche, keine Überraschung pro Quartal.
Beispiel:
In einem realen Sweep-Lauf wurde gemeldet, dass eine Drittanbieter-URL im Code (Asset-CDN) im Quelltext auftauchte, die in der DSE noch nicht benannt war. Die Korrektur (DSE-Eintrag ergänzt) dauerte 15 Minuten, der Befund war ohne den Sweep wahrscheinlich monatelang unbemerkt geblieben. Wer ähnliche Drifts auf der eigenen Site vermutet: ein Erstgespräch (30 Minuten, kostenfrei) ordnet die Lage ein.
Für eine strukturierte Bewertung der Wartungs-Lage einer bestehenden Kanzlei-Site empfehlen wir den Hebel-Audit (890 €, bei Mandanten-Boost-Beauftragung innerhalb von 60 Tagen voll anrechenbar).
Zusammenfassung
Eine Website ist kein Bild an der Wand — sie ist ein lebendes System, eingebettet in eine Infrastruktur, die sich permanent verändert. NPM-Pakete bekommen CVEs, Hosting-Plattformen ändern Default-Header, CDN-Anbieter verschärfen Bot-Detection — keines dieser Ereignisse steht in einer Wartungsrechnung, aber alle haben Auswirkungen. Auf fahoch2.de prüft ein wöchentlicher Security-Sweep vier Stufen: Dependencies (Doppel-Schicht zu Dependabot), Security-Header (Soll vs Live mit securityheaders.com als Schranke), Code-Pattern (grep nach Risiko-Mustern und hardcoded Keys), Compliance-Drift (DSE vs reale Code-Aufrufe). Für Kanzlei-Sites mit niedriger Änderungs-Frequenz verdichten sich die vier Stufen zu drei Quartals-Fragen: CMS-/Plugin-Update-Stand, securityheaders.com mindestens Note A, DSE-Drift. Das ist die strukturelle Antwort auf die Lüge „einmal gebaut, dann stabil" — und die Voraussetzung dafür, dass eine Kanzlei-Website über Jahre keine stillen Probleme akkumuliert.
Quellen
- npm — npm audit Documentation — abgerufen 2026-06-07
- securityheaders.com — HTTP Security Headers Scanner — abgerufen 2026-06-07
- Mozilla Observatory — Web Security Scanner — abgerufen 2026-06-07
- Next.js — Server Actions and Mutations — abgerufen 2026-06-07
- BSI — Mindeststandards für die Informationssicherheit — abgerufen 2026-06-07
- OWASP — Top 10 Web Application Security Risks — abgerufen 2026-06-07
- NVD — CVE-2024-3094 (xz-utils Backdoor) — abgerufen 2026-06-07
Disclaimer: Beschreibung der operativen Sicherheits-Routine von fahoch2.de zum Zeitpunkt der Veröffentlichung. Dies ist keine erschöpfende Security-Beratung. Konkrete Sicherheits- und Compliance-Konzepte für Steuerkanzleien folgen § 203 StGB, § 4 BDSG und den GoBD — und gehören in die Abstimmung mit dem Datenschutzbeauftragten und ggf. der zuständigen Steuerberaterkammer.
Stand und rechtlicher Hinweis
- Erstveröffentlichung
- Autor
- Alexander Mock
- Lesezeit
- 9 Minuten
Allgemeine Information, keine individuelle Beratung. Dieser Artikel beschreibt steuer-, berufs- oder webrechtliche Grundsystematik zum oben genannten Stand. Er ist nicht mandantenspezifisch und ersetzt keine individuelle Rechts-, Steuer- oder Anlage-Beratung im Sinne § 2 Rechtsdienstleistungsgesetz (RDG), § 1 Steuerberatungsgesetz (StBerG) oder § 34d/f Gewerbeordnung (GewO). Vor jeder konkreten Entscheidung wenden Sie sich an einen zugelassenen Steuerberater, Rechtsanwalt oder die jeweils zuständige Behörde.
Zitate aus amtlichen Werken. Gesetzes-Texte, Verwaltungsanweisungen (BMF-Schreiben) und Gerichts-Entscheidungen (BFH, BGH, BVerfG, EuGH) sind nach § 5 Urheberrechtsgesetz gemeinfrei. Zitiert wird jeweils mit Aktenzeichen und Entscheidungs- bzw. Schreibens-Datum. Aktualität der Rechtslage bitte vor Bezugnahme gegen die jeweilige amtliche Veröffentlichung prüfen (gesetze-im-internet.de, bundesfinanzhof.de, bmf.bund.de).
Externe Quellen. Wo wir auf Studien, Branchenstatistiken oder Drittanbieter-Dokumente verweisen, ist das Abrufs-Datum jeweils beim Quellenverweis angegeben. Online-Inhalte können sich nach unserem Abruf geändert haben.
Haftung. Trotz sorgfältiger Recherche können Ungenauigkeiten oder Rechtsänderungen nach Veröffentlichung nicht ausgeschlossen werden. Eine Haftung für Schäden, die durch die Nutzung der Information ohne anwaltliche oder steuerberaterliche Gegenprüfung entstehen, ist ausgeschlossen — soweit gesetzlich zulässig.
Themen
Auch zu lesen
Sicherheit
Note A statt A+: warum unsafe-inline in der CSP bleibt
Eine Content-Security-Policy zu setzen ist der erste Schritt — sie maximal scharf zu stellen ist der zweite, den man nicht reflexhaft gehen sollte. Eine CSP, die noch unsafe-inline erlaubt, bekommt bei den gängigen Prüfdiensten ein A, aber kein A+. Der naheliegende Reflex ist, das unsafe-inline mit Nonces wegzubekommen — und genau hier liegt bei einer statisch ausgelieferten Website eine Falle. Dieser Artikel zeigt, warum der Weg zum A+ auf einer modernen Architektur das CDN-Caching kosten würde, das den eigentlichen Geschwindigkeits- und Sicherheits-Vorteil ausmacht, und warum wir auf fahoch2.de deshalb bewusst und ehrlich bei Note A bleiben.
Sicherheit
Cloudflare Turnstile statt reCAPTCHA: Spam ohne Cookies
Auf vielen Kanzlei-Websites sitzt unter dem Kontaktformular ein Google-reCAPTCHA — meist eingebaut, weil „man das so macht". Der Preis dafür wird selten mitbedacht: Jeder Seitenaufruf löst einen Request an Google in die USA aus, der Cookie-Banner wird damit faktisch zur Pflicht, und für legitime Besucher ist die Bedienung oft holprig. Cloudflare Turnstile ist die seriöse Alternative: kein Tracking-Cookie, datensparsam, für die meisten Besucher unsichtbar. Dieser Artikel zeigt, wann eine Kanzlei überhaupt ein Captcha braucht, warum Turnstile der sauberere reCAPTCHA-Ersatz ist, und wie eine Einbindung aussähe, die das Formular bei einem Cloudflare-Ausfall nicht mit in den Abgrund reißt.
Sicherheit
Hash-Blocklist im Voice-Linter gegen Datenleaks
Wer auf einer Website regelmäßig über Audits, beobachtete Muster oder reale Vorfälle schreibt, trägt ein leises Risiko mit sich: dass irgendwann ein Name, eine Domain oder ein zu konkreter Bezug im veröffentlichten Text landet, der dort nicht hingehört. Solange eine Person allein und konzentriert schreibt, geht das eine Weile gut. Sobald mehrere Hände an den Inhalten arbeiten oder ein KI-Assistent Vorschläge beisteuert, ist es nur eine Frage der Zeit. Aufmerksamkeit allein ist dagegen keine verlässliche Schutzschicht. Dieser Artikel zeigt, wie ein kleiner Hash-basierter Pre-Commit-Linter dieses Versehen strukturell verhindert — und dabei den entscheidenden Trick nutzt, die zu schützenden Begriffe nie im Klartext abzulegen.
Wenn Sie das in Ruhe besprechen möchten
Lassen Sie uns 30 Minuten zur Außen-Sicht Ihrer Kanzlei sprechen.
Erst gratis-Vorprüfung über das URL-Tool — dann entscheiden Sie, ob ein 890-€-Tiefen-Audit für Sie Sinn ergibt.