feat: initial implementation of website integrity scanner
Python-Package zur unabhängigen Überwachung statischer Websites gegen SEO-Spam und unbefugte Manipulationen. Läuft außerhalb des Hosters. Kernfunktionen: - Reiner Python-Crawler (bs4+lxml), kein wget - Baseline-Management mit manuellem Freigabe-Workflow (niemals automatisch) - Text-/Link-/Meta-Diff mit Risiko-Scoring (grün/gelb/rot) - Hidden-Content-Erkennung (CSS inline, noscript, Kommentar-Links) - Whitelist für externe Domains und interne Pfade - E-Mail + Webhook Alarmierung - CLI: init, crawl, check, scan, approve, report, status - 79 Unit-Tests (pytest), alle grün Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
98e8d11eb5
24 changed files with 4295 additions and 0 deletions
18
config/allowed_external.yaml
Normal file
18
config/allowed_external.yaml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Whitelist erlaubter externer Domains
|
||||
#
|
||||
# Jede externe Domain, die auf der Website verlinkt ist, muss hier eingetragen sein.
|
||||
# Neue externe Domains, die NICHT hier stehen, lösen einen Alarm aus.
|
||||
#
|
||||
# Format: eine Domain pro Zeile (ohne Protokoll)
|
||||
# Beispiele:
|
||||
|
||||
# Häufig verwendete externe Ressourcen — nur eintragen, was wirklich genutzt wird:
|
||||
# - fonts.googleapis.com
|
||||
# - fonts.gstatic.com
|
||||
# - cdnjs.cloudflare.com
|
||||
# - maps.googleapis.com
|
||||
# - www.google-analytics.com
|
||||
# - www.googletagmanager.com
|
||||
|
||||
# Für bredelar.info: Bitte nach erstem `init` prüfen und befüllen.
|
||||
# Vorerst leer = alle externen Links lösen Alarm aus.
|
||||
17
config/allowed_paths.yaml
Normal file
17
config/allowed_paths.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Whitelist erlaubter interner URL-Pfade (optional)
|
||||
#
|
||||
# Wenn diese Liste befüllt ist, lösen interne Links auf nicht gelistete
|
||||
# Pfade einen Alarm aus.
|
||||
# Leer lassen = keine Pfad-Whitelist-Prüfung (nur Baseline-Diff zählt).
|
||||
#
|
||||
# Format: ein Pfad pro Zeile (absoluter Pfad, ohne Domain)
|
||||
# Beispiel für bredelar.info:
|
||||
#
|
||||
# - /
|
||||
# - /index.html
|
||||
# - /kontakt/
|
||||
# - /kontakt/index.html
|
||||
# - /impressum/
|
||||
# - /datenschutz/
|
||||
# - /ueber-uns/
|
||||
# - /aktuelles/
|
||||
23
config/ignore_rules.yaml
Normal file
23
config/ignore_rules.yaml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
# Normalisierungsregeln für den Diff
|
||||
#
|
||||
# Diese Einstellungen reduzieren Fehlalarme durch harmlose, automatisch
|
||||
# generierte Inhaltsänderungen.
|
||||
|
||||
# CSS-Selektoren, die vor dem Diff aus dem DOM entfernt werden.
|
||||
# Nützlich für Elemente mit automatischen Zeitstempeln oder Zählern.
|
||||
ignore_selectors:
|
||||
# - "#last-modified"
|
||||
# - ".timestamp"
|
||||
# - "[data-cache-buster]"
|
||||
# - ".cookie-banner"
|
||||
|
||||
# Reguläre Ausdrücke, die im normalisierten Text durch [IGNORED] ersetzt werden.
|
||||
# Nützlich für Datumsangaben, Versionsnummern, etc.
|
||||
ignore_patterns:
|
||||
# Datumsformate (deutsch: 12.06.2026 oder 12. Juni 2026)
|
||||
# - '\b\d{1,2}\.\s*(?:Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember)\s+\d{4}\b'
|
||||
# - '\b\d{1,2}\.\d{1,2}\.\d{4}\b'
|
||||
# "Stand: ..." Angaben
|
||||
# - 'Stand:\s+\S+'
|
||||
# Cache-Buster in URLs (werden im HTML-Text sichtbar)
|
||||
# - '\?v=[\w.]+\b'
|
||||
Loading…
Add table
Add a link
Reference in a new issue