diff --git a/.gitignore b/.gitignore index aacb3bd..b2f5c0e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,9 +29,6 @@ bredelar.info/logs/ jamulix.de/data/ jamulix.de/reports/ jamulix.de/logs/ -example.com/data/ -example.com/reports/ -example.com/logs/ # Editor .idea/ diff --git a/config/allowed_external.yaml b/config/allowed_external.yaml new file mode 100644 index 0000000..5fa4271 --- /dev/null +++ b/config/allowed_external.yaml @@ -0,0 +1,52 @@ +# 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 diff --git a/config/allowed_paths.yaml b/config/allowed_paths.yaml new file mode 100644 index 0000000..464924b --- /dev/null +++ b/config/allowed_paths.yaml @@ -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/ diff --git a/config/ignore_rules.yaml b/config/ignore_rules.yaml new file mode 100644 index 0000000..81b9ec8 --- /dev/null +++ b/config/ignore_rules.yaml @@ -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' diff --git a/example.com/config.yaml b/example.com/config.yaml deleted file mode 100644 index cfdb2d4..0000000 --- a/example.com/config.yaml +++ /dev/null @@ -1,165 +0,0 @@ -# ============================================================ -# 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" diff --git a/example.com/config/allowed_external.yaml b/example.com/config/allowed_external.yaml deleted file mode 100644 index 1c9d583..0000000 --- a/example.com/config/allowed_external.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# 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 diff --git a/example.com/config/ignore_rules.yaml b/example.com/config/ignore_rules.yaml deleted file mode 100644 index f325c14..0000000 --- a/example.com/config/ignore_rules.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# 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+'