Compare commits

..

2 commits

Author SHA1 Message Date
e6dbab3ebf docs: add example.com template for new target websites
Heavily commented config.yaml and config/ directory serve as a
copy-paste starting point for any new site to monitor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 15:38:13 +02:00
c9bfba1701 Name und Email-Adresse korrigiert. 2026-06-12 15:31:18 +02:00
7 changed files with 199 additions and 92 deletions

3
.gitignore vendored
View file

@ -29,6 +29,9 @@ bredelar.info/logs/
jamulix.de/data/
jamulix.de/reports/
jamulix.de/logs/
example.com/data/
example.com/reports/
example.com/logs/
# Editor
.idea/

View file

@ -1,52 +0,0 @@
# Whitelist erlaubter externer Domains — bredelar.info
# Erstellt nach initialem Crawl und manueller Sichtprüfung am 2026-06-12.
# Neue externe Domains, die NICHT hier stehen, lösen einen Alarm aus.
# Lokale Vereine, Institutionen, Betriebe
- www.bergbauspuren-bredelar.de
- www.bergbauspuren.de
- www.kloster-bredelar.de
- www.schuetzen-bredelar.de
- www.klosterschuetzen-bredelar.de
- www.bsg-bredelar.de
- www.sg-hoppecketal.de
- www.sg-hoppecketal-padberg.de
- www.feuerwehrhütte-bredelar.de
- www.lesdurs-mc.de
- www.kantorei-marsberg.de
- www.tourismus-marsberg.de
- www.katholische-kirche-marsberg.de
- www.marsberg.ekvw.de
# Lokale Unternehmen (Gewerbetreibende aus bredelar.info/companies/)
- www.VolksbankMarsberg.de
- www.borghoff-bredelar.de
- www.dachdeckermarsberg.de
- www.maler-luce.de
- www.pyls-pflasterbau.de
# Technische Ressourcen (Fonts, CDN, Wetter-Widget)
- fonts.googleapis.com
- fonts.gstatic.com
- cdnjs.cloudflare.com
- www.wetter.com
- static1.wetter.com
# Datenschutzerklärung / Impressum (gesetzlich vorgeschriebene Links)
- ec.europa.eu
- www.e-recht24.de
- www.heise.de
- www.ratgeberrecht.eu
- www.privacyshield.gov
- policies.google.com
- www.google.com
- adssettings.google.com
- developers.facebook.com
- www.facebook.com
- twitter.com
# Webentwickler / Technischer Betreiber
- www.antillu.de
# www-Variante der eigenen Domain (wird intern verlinkt)
- www.bredelar.info

View file

@ -1,17 +0,0 @@
# 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/

View file

@ -1,23 +0,0 @@
# 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'

165
example.com/config.yaml Normal file
View file

@ -0,0 +1,165 @@
# ============================================================
# Integrity Scanner — Konfigurationsvorlage
# ============================================================
# Verwendung:
# 1. Dieses Verzeichnis kopieren:
# cp -r example.com meine-seite.de
# 2. In meine-seite.de/config.yaml alle Stellen mit
# "example.com" durch die echte Domain ersetzen.
# 3. Verzeichnis in .gitignore eintragen (data/reports/logs).
# 4. Erste Einrichtung:
# python -m scanner --config meine-seite.de/config.yaml init
# ============================================================
# --- Ziel-Website ---
target: "https://example.com"
# User-Agent, mit dem der Scanner sich bei der Website meldet.
# Bitte nicht auf einen Browser-Agent ändern — der Scanner soll erkennbar sein.
user_agent: "integrity-scanner/1.0 (+security-monitoring)"
# Timeout in Sekunden pro HTTP-Anfrage
request_timeout: 20
# --- Verzeichnisse (müssen absolut angegeben werden) ---
# Pfad zum Projektverzeichnis anpassen!
data_dir: "/home/dschlueter/Python_Programs/integrity_scanner_fuer_statische_Webseiten/example.com/data"
reports_dir: "/home/dschlueter/Python_Programs/integrity_scanner_fuer_statische_Webseiten/example.com/reports"
logs_dir: "/home/dschlueter/Python_Programs/integrity_scanner_fuer_statische_Webseiten/example.com/logs"
config_dir: "/home/dschlueter/Python_Programs/integrity_scanner_fuer_statische_Webseiten/example.com/config"
# --- Crawl-Einstellungen ---
crawl:
# Maximale Anzahl Seiten pro Crawl (Schutz vor endlosen Websites)
max_pages: 200
# Wartezeit zwischen zwei Seitenanfragen in Sekunden (Server schonen)
delay_seconds: 1.0
respect_robots_txt: false
# Pfade, die vom Scan ausgeschlossen werden sollen.
# Nützlich für Bereiche mit gewollt häufig wechselnden Inhalten,
# z. B. RSS-Feeds, News-Archive, Nutzerprofile.
# Beispiel: ["/rss/", "/feed/", "/news/archiv/", "/user/"]
exclude_paths: []
# Dateiendungen, die nicht gecrawlt werden (Binärdateien)
skip_extensions:
- ".jpg"
- ".jpeg"
- ".png"
- ".gif"
- ".webp"
- ".svg"
- ".ico"
- ".pdf"
- ".zip"
- ".woff"
- ".woff2"
- ".ttf"
- ".otf"
- ".eot"
- ".mp4"
- ".mp3"
- ".webm"
- ".avi"
- ".mov"
# --- Bewertungsgewichte ---
# Jedes Ereignis erhöht den Score. Ab 20 = gelb, ab 60 = rot.
# Die Werte können hier für diese Website angepasst werden.
scoring:
new_external_domain: 50 # Neuer Verweis auf fremde Domain
new_internal_url: 30 # Neue interne Seite aufgetaucht
missing_internal_url: 20 # Bekannte Seite verschwunden
hidden_content: 40 # Unsichtbarer Text/Link (display:none)
unexpected_canonical: 35 # Canonical-Tag geändert
meta_refresh: 40 # Automatische Weiterleitung eingebaut
unexpected_jsonld: 35 # Unbekannter JSON-LD-Typ
large_text_addition: 20 # Großer neuer Textblock (>200 Zeichen)
new_inline_script_suspicious: 30 # Verdächtiges inline JavaScript
comment_links: 25 # Link in HTML-Kommentar versteckt
new_broken_link: 20 # Neuer kaputt interner Link
suspicious_filename: 60 # Webshell-typischer Dateiname verlinkt
cloaking_extra_link: 60 # Nur für Google-Bot sichtbarer Link
cloaking_extra_text: 40 # Nur für Google-Bot sichtbarer Text
cloaking_vary_ua: 25 # Server sendet verschiedene Inhalte je UA
changed_script: 40 # JavaScript-Datei verändert
changed_stylesheet: 30 # CSS-Datei verändert
changed_asset: 20 # Bild/PDF/sonstige Datei verändert
thresholds:
yellow: 20 # Ab diesem Score: Warnung (gelb) — Bitte prüfen
red: 60 # Ab diesem Score: Alarm (rot) — Sofort prüfen
large_text_block_chars: 200
# --- Wöchentliche Zusatzprüfungen ---
# Laufen automatisch beim täglichen `scan` mit — kein separater Aufruf nötig.
periodic_checks:
enabled: true
interval_days: 7
cloak_check: true # Prüft ob Google andere Inhalte sieht als Besucher
ext_links: true # Prüft ob externe Links noch erreichbar sind
assets: true # Prüft ob CSS/JS/Bilder sich verändert haben
# --- E-Mail-Benachrichtigung ---
# Passwort NIEMALS hier eintragen — nur als Umgebungsvariable:
# export SCANNER_SMTP_PASSWORD="geheimesPasswort"
alerting:
min_level: "yellow" # "yellow" = bei Gelb und Rot mailen; "red" = nur bei Rot
email:
enabled: false # Auf true setzen wenn SMTP konfiguriert
smtp_host: "mail.example.com"
smtp_port: 587
smtp_tls: true
smtp_user: "scanner@example.com"
smtp_password_env: "SCANNER_SMTP_PASSWORD"
from: "scanner@example.com"
to:
- "admin@example.com"
webhook:
enabled: false
url: "" # z.B. Slack-Webhook oder Telegram-Bot-URL
# --- Normalisierung ---
# Elemente, die vor dem Vergleich aus dem HTML entfernt werden
# (z. B. dynamische Datums-/Zeitanzeigen die sich täglich ändern).
normalization:
strip_html_comments: true
collapse_whitespace: true
ignore_selectors:
# - "#last-modified" # Element mit dieser ID ignorieren
# - ".timestamp" # Alle Elemente mit dieser CSS-Klasse ignorieren
ignore_patterns:
# - '\d{1,2}\.\d{1,2}\.\d{4}' # Datumsangaben im Text ignorieren
# - 'Stand:\s+\S+'
# --- Erlaubte JSON-LD-Typen ---
# Alles, was hier nicht steht und auf der Website auftaucht, löst Alarm aus.
allowed_jsonld_types:
- "Organization"
- "WebSite"
- "WebPage"
- "Article"
- "BreadcrumbList"
- "ItemList"
- "LocalBusiness"
- "Place"
- "Person"
- "Event"
- "FAQPage"
- "Question"
- "Answer"
- "ImageObject"
- "SiteLinksSearchBox"
- "ContactPage"
- "AboutPage"
# --- Erwartete Security-Header ---
# Fehlen diese Header, erscheint ein Hinweis im Report (kein Score-Einfluss).
security_headers:
- "Content-Security-Policy"
- "Strict-Transport-Security"
- "X-Content-Type-Options"
- "Referrer-Policy"

View file

@ -0,0 +1,11 @@
# Erlaubte externe Domains für example.com
#
# Nach dem ersten `init`-Crawl alle legitimen externen Domains eintragen,
# die auf der Website verlinkt sind (z.B. CDNs, Social-Media, Partner).
# Jede Domain, die hier NICHT steht, löst beim nächsten Scan Alarm aus.
#
# Beispiele:
# - fonts.googleapis.com
# - cdn.jsdelivr.net
# - www.youtube.com
# - maps.googleapis.com

View file

@ -0,0 +1,20 @@
# Ignorierregeln für example.com
#
# ignore_selectors: CSS-Selektoren — passende HTML-Elemente werden vor dem
# Vergleich entfernt. Nützlich für dynamische Bereiche (Datum, Uhrzeit,
# Zähler, zufällige Werbebanner).
#
# ignore_patterns: Reguläre Ausdrücke — passende Textstellen werden durch
# [IGNORED] ersetzt. Nützlich für Datumsangaben oder sich ändernde Zahlen.
#
# Diese Regeln ergänzen die Einstellungen in config.yaml (normalization).
ignore_selectors:
# - "#dynamic-counter"
# - ".last-updated"
# - ".ad-banner"
ignore_patterns:
# - '\d{1,2}\.\d{1,2}\.\d{4}' # Datumsangaben TT.MM.JJJJ
# - '\d{1,2}:\d{2}\s*(Uhr)?' # Zeitangaben
# - 'zuletzt geändert am \S+'