integrity_scanner_fuer_stat.../Keller/PROMPT.md

249 lines
10 KiB
Markdown
Raw Normal View History

Erstelle bitte ein produktionsreifes, möglichst schlankes Kommandozeilen-Kontroll-Programm in Python zur unabhängigen Überwachung der kleinen, statischen Website https://bredelar.info (einstellbar) gegen Manipulationen. Es soll manuell oder als Cron-Programm einsetzbar sein.
Ziel
Das Programm soll im Verantwortungsbereich des Betreibers laufen, nicht beim beauftragten Web-Dienstleister. Es soll regelmäßig, z. B. täglich per Cron um 03:00 Uhr (einstellbar) , die gesamte Web-Repräsentanz von bredelar.info überwachen und Alarm auslösen, wenn unerwartete Änderungen, neue Seiten, unerlaubte Links oder problematische Inhalte auftauchen. Der Fokus liegt auf robuster Erkennung bei möglichst geringem Betriebsaufwand. Die Website ist klein und soll klein bleiben.
Wichtige Rahmenbedingungen
- Die Website ist klein, vermutlich mit wenigen Seiten.
- Es gab bereits einen SEO-Spam-/Parasite-SEO-artigen Vorfall.
- Angreifer können Texte thematisch passend tarnen; reine Keyword-Heuristik reicht daher nicht.
- Das System soll unabhängig vom Dienstleister arbeiten.
- Das System soll auf einem kleinen Linux-VHost oder Minimalserver laufen können.
- Bevorzugte Sprachen/Tools: Python 3 oder Shell, aber bitte pragmatisch entscheiden.
- Ergebnis soll einfach installierbar, wartbar und nachvollziehbar sein.
- Keine unnötig komplexe Infrastruktur, keine Kubernetes-, Cloud-, Queue- oder Datenbank-Overkill-Lösung.
Die Lösung soll diese drei Kernprobleme adressieren
1. Integritätsprüfung / Diff-Monitoring
- Prüfe regelmäßig alle relevanten Seiten von bredelar.info.
- Erstelle Snapshots einer „gesunden“ Referenzversion.
- Vergleiche spätere Abrufe mit dieser Referenz.
- Alarmiere bei jeder relevanten Abweichung.
- Alarm muss detailliert sein: betroffene URL, Art der Änderung, alter/neuer Zustand, neue/entfernte Links, neue/entfernte Textelemente, neue/entfernte HTML-Elemente, Risiko-Einstufung.
- Änderungen durch legitime Pflege müssen ebenfalls erkannt werden; sie dürfen erst nach manueller Freigabe zur neuen Referenz/Baseline werden.
- Wichtig: Das System darf kompromittierte Inhalte niemals automatisch als neue „gesunde“ Basis übernehmen.
2. Link-Kontrolle / Whitelist
- Finde alle offenen und verdeckten Links auf der gesamten Web-Repräsentanz.
- Prüfe sichtbare Links, versteckte Links, Links in Metadaten, Canonical, hreflang, redirects, iframe/src, script/src, img/src, form action, meta refresh, JSON-LD, strukturierte Daten, noscript-Bereiche, Kommentare, data-Attribute, CSS-basierte Hinweise, falls sinnvoll.
- Führe eine Whitelist erlaubter externer Ziele und eine Whitelist erlaubter interner URL-Pfade.
- Jede neue externe Ziel-Domain oder unerwartete interne URL soll Alarm auslösen.
- SEO-Spam braucht Links; daher ist das ein zentraler Kontrollpunkt.
3. Problematische Inhalte
- Erkenne auch problematische Inhalte ohne Links, z. B. Pornografie, Dirty Talk, politische Propaganda, diffamierende oder strafbare Inhalte, widersprüchliche Aussagen, versteckte Spam-Texte oder thematisch unpassende kommerzielle Inhalte.
- Nutze dafür einfache robuste Regeln plus optional eine zusätzliche semantische/KI-gestützte Analyse.
- Aber: KI/semantische Analyse ist Ergänzung, nicht Kern. Kern bleibt Integritäts- und Link-Monitoring.
- Gute Angreifer können Dorf-/Heimat-Begriffe einbauen; daher bitte nicht auf simple White-/Blacklist-Keywords vertrauen.
Ganz wichtige Zusatzanforderung: „Gesunde“ Datenausgangslage und Pflege
Das System muss sauber mit einer Referenz-/Baseline-Verwaltung umgehen:
A. Initiale gesunde Ausgangslage erzeugen
- Implementiere einen expliziten Initialisierungsmodus.
- Das System soll die Domain crawlen, bekannte Seiten erfassen und daraus eine erste Referenz erzeugen.
- Diese Referenz darf nicht blind übernommen werden; es muss einen Review-/Freigabeprozess geben.
- Liefere dafür einen klaren Workflow:
1. Crawl der Domain
2. Fundliste aller internen Seiten
3. Extraktion aller externen Links
4. Erkennung möglicher Auffälligkeiten
5. Manuelle Prüfung
6. Erst nach Freigabe: Speichern als „gesunde“ Baseline
B. Pflege der gesunden Daten
- Änderungen an legitimen Inhalten sollen nicht automatisch in die Baseline einfließen.
- Stattdessen:
- Monitoring meldet Änderung
- Mensch prüft Änderung
- separater „approve baseline“-Schritt übernimmt die neue Version
- Baselines sollen versioniert und nachvollziehbar abgelegt werden.
- Es soll möglich sein, pro URL eine neue Referenz freizugeben.
- Es soll auch möglich sein, die gesamte Site-Referenz neu aufzubauen, wenn es große legitime Änderungen gibt.
- Es soll erkennbar bleiben, wer/was/wann eine Baseline freigegeben hat.
Crawler- und Erkennungslogik
Bitte entwerfe das System so, dass es nicht nur bekannte Seiten prüft, sondern die Domain aktiv crawlt:
- Start mit einer Seed-Liste
- Danach internes Follow aller erlaubten Links
- Begrenzung auf bredelar.info
- Erkennung neuer interner URLs
- Erkennung von Seiten, die plötzlich verschwunden sind
- Optional: robots.txt respektieren konfigurierbar
- Schutz gegen Crawl-Explosion, Parameter-Müll und Kalender-/Session-URLs
Das System soll auf mehreren Ebenen vergleichen:
- Roh-HTML-Diff
- bereinigter DOM-/Text-Diff
- Link-Diff
- URL-Diff der gefundenen internen Seiten
- Metadaten-Diff (title, meta description, canonical, hreflang, robots, og-tags)
- Hidden-Content-Indikatoren
- Optional Header-Checks
Wichtig: Normalisierung gegen Fehlalarme
Bitte implementiere vor dem Diff sinnvolle Normalisierung, damit harmlose Änderungen nicht dauernd Alarm auslösen:
- Whitespace normalisieren
- irrelevante Timestamps, Cache-Buster, Nonces, zufällige IDs, Tracking-Parameter optional ignorieren
- HTML in eine stabile Form bringen
- konfigurierbare Ignore-Regeln für Seitenbereiche oder Selektoren
- getrennte Betrachtung von Roh-HTML und sichtbar extrahiertem Inhalt
Hidden-/SEO-Spam-spezifische Checks
Bitte berücksichtige speziell typische SEO-Spam-/Parasite-SEO-Indikatoren:
- neue interne Unterseiten
- neue externe Links
- versteckte Links
- display:none / visibility:hidden / opacity:0 / off-screen positioning
- meta refresh
- unerwartete canonical-Tags
- unerwartete strukturierte Daten / JSON-LD mit fremden Entities
- starke Änderungen in Title/H1/H2
- längere neue Textblöcke
- eingebettete kommerzielle Blöcke innerhalb eigentlich lokaler Inhalte
- auffällige Script-/Iframe-Einbindungen
- Kommentar- oder noscript-Missbrauch
- falls praktikabel: einfache Scoring-Logik für Verdachtsfälle
Alarmierung
Das System soll Alarmmeldungen verschicken können, idealerweise modular:
- E-Mail als Mindeststandard
- optional Webhook/Signal/Matrix/Telegram/SMS als Erweiterung
- Alarmmeldungen sollen kompakt, aber forensisch brauchbar sein
- Beispielinhalt:
- Zeitpunkt
- URL
- Schweregrad
- neue interne URLs
- neue externe Domains
- Link-Diff
- Text-Diff
- Hidden-Content-Hinweise
- Empfehlung: nur beobachten / prüfen / sofort handeln
Technische Zielarchitektur
Bitte schlage eine minimalistische, aber saubere Struktur vor, z. B.:
- ein Hauptprogramm mit Subcommands oder mehrere kleine Skripte
- Cron-tauglich
- Konfigurationsdateien in YAML oder JSON
- lokale Dateistruktur für:
- seeds
- erlaubte interne URLs
- erlaubte externe Links/Domains
- snapshots
- baselines
- reports
- state
- logs
- bitte ohne unnötige externe Dienste, wenn nicht zwingend erforderlich
Gewünschte Artefakte
Ich möchte von dir eine vollständige, direkt nutzbare Lösung erzeugt bekommen. Bitte liefere:
1. Architekturüberblick
- kurz und präzise
- welche Komponenten gibt es und warum
2. Bedrohungsmodell
- was die Lösung erkennt
- was sie nicht erkennt
- welche Annahmen gelten
3. Projektstruktur
- konkrete Dateibaum-Struktur
4. Konfigurationsdateien
- vollständig, mit sinnvollen Beispielen
- z. B. config.yaml, seeds.yaml, allowed_external_domains.yaml, allowed_internal_paths.yaml, ignore_rules.yaml
5. Vollständigen Quellcode
- möglichst in Python 3
- sauber strukturiert
- modular
- mit CLI-Subcommands wie z. B.:
- init-baseline
- crawl
- check
- approve
- report
- robuste Fehlerbehandlung
- keine unnötige Magie
- gut lesbar
6. HTML-Parsing und Extraktion
- stabile Extraktion von:
- sichtbarem Text
- Links
- Assets/Referenzen
- Metadaten
- Hidden-Content-Hinweisen
- bitte geeignete Bibliotheken wählen und begründen
7. Diff-Logik
- wie Roh-HTML-, Text-, Link- und URL-Diffs erzeugt werden
- Ausgabe menschenlesbar und maschinenlesbar
8. Alarmierungsmodul
- zunächst mindestens E-Mail
- optional Webhook-Schnittstelle abstrahiert
- Beispielkonfiguration
9. Cron-Setup
- konkrete Cron-Beispiele
- z. B. täglicher Check 03:00 Uhr
- Log-Rotation oder Umgang mit Logs
10. Workflow-Dokumentation
- Erstinitialisierung der „gesunden“ Daten
- Review/Freigabe
- täglicher Betrieb
- Umgang mit legitimen Änderungen
- Incident-Fall: was tun bei Alarm
11. Sicherheits- und Qualitätsverbesserungen
- sinnvolle optionale Erweiterungen
- aber nur pragmatisch, nicht überengineert
12. Tests
- mindestens ein paar einfache Unit- oder Integrations-Tests
- insbesondere für:
- URL-Normalisierung
- Link-Extraktion
- Hidden-Content-Erkennung
- Baseline-Freigabeprozess
13. Beispielausgabe
- Beispiel für normalen Bericht ohne Auffälligkeiten
- Beispiel für Alarm bei neuer SEO-Spam-Seite
- Beispiel für Alarm bei neuem externen Link
- Beispiel für Alarm bei legitimer Änderung, die anschließend freigegeben wird
Wichtige Designprinzipien
- So einfach wie möglich, aber nicht einfacher.
- Kleine Website, kleine Lösung.
- Hohe Nachvollziehbarkeit.
- Keine automatische Selbstheilung.
- Keine automatische Baseline-Aktualisierung.
- Lieber wenige robuste Regeln als viele fragile.
- Unabhängige Kontrolle des Dienstleisters.
- Gute Wartbarkeit für technisch versierte Betreiber.
Wichtige technische Präferenzen
- Linux-tauglich
- Python 3 bevorzugt
- Wenige, verbreitete Bibliotheken
- Keine schweren externen Datenbanken, wenn Dateispeicherung reicht
- UTF-8 überall
- Saubere Trennung zwischen Konfiguration, Zustand, Referenzdaten und Reports
Bitte beginne mit:
1. einer kurzen Zielarchitektur,
2. danach der konkreten Projektstruktur,
3. dann allen Dateien mit vollständigem Inhalt,
4. und zum Schluss einer knappen Betriebsanleitung.
Wichtig:
- Bitte keine abstrakte Beratung allein, sondern vollständige umsetzbare Artefakte.
- Falls du Annahmen treffen musst, triff pragmatische Annahmen und dokumentiere sie.
- Der Code soll direkt als Ausgangspunkt verwendbar sein.