fix: KI-Analyse deckt standardmäßig ALLE Inhalte ab (kein Limit-Risiko)

Das per-Scan-Limit (max_pages/images_per_scan) war ein Sicherheitsrisiko:
Inhalte jenseits des Fensters blieben über viele Scans ungeprüft. Eine
KI-Bildanalyse ist aber nur sinnvoll, wenn ALLE Bilder geprüft werden.

Neu, sauber getrennt:
- Geänderte/neue/geflaggte Inhalte werden IMMER sofort geprüft (Echtzeit-
  Schutz), ungeachtet jeder Drossel — auch wenn das Limit klein ist.
- Die Limits drosseln NUR den historischen Altbestand und sind per Default
  0 = unbegrenzt → der erste Scan deckt den kompletten Bestand ab. Dank
  Hash-Cache eine einmalige Ausgabe; Folge-Scans prüfen nur noch Neues.
- Positiver Wert bleibt als optionale Drossel nur für sehr große Sites.

Tests: 257 grün (+2: geänderte Seite trotz Drossel=1 geprüft; image-Bestand
backlog=0 deckt alle Bilder in einem Scan ab). Default-Werte 20/15 → 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-13 04:12:11 +02:00
commit 369a3b8774
5 changed files with 83 additions and 31 deletions

View file

@ -1012,24 +1012,28 @@ Wirkung: Der Erst-Scan einer Site (der den ganzen Bestand prüft) wird deutlich
rate-limited Free-Modelle sofort übersprungen werden und die verbleibenden Anfragen nebenläufig
laufen.
### Vollständige Bildabdeckung (kein blinder Fleck)
### Vollständige Abdeckung (kein blinder Fleck)
Pro Scan werden maximal `image.max_images_per_scan` Bilder geprüft (Kostendeckel). Damit jenseits
dieses Fensters **kein Bild dauerhaft ungeprüft** bleibt — sonst könnte ein Angreifer z. B. ein
strafbares Logo auf einer ansonsten stabilen Seite platzieren —, holt **jeder** Scan zusätzlich
noch nicht analysierte Bilder nach, bis der gesamte Bildbestand abgedeckt ist. Reihenfolge:
zuerst Bilder auf geänderten Seiten und bereits geflaggte, dann mit dem Restbudget der noch
unbekannte Rest.
Eine KI-Bildanalyse ist nur sinnvoll, wenn **alle** Bilder geprüft werden — sonst bliebe ein
Bild jenseits eines Limits dauerhaft ungeprüft (z. B. ein eingeschleustes strafbares Logo auf
einer ansonsten stabilen Seite). Deshalb gilt:
**Initiale Einrichtung großer Bildbestände:** Hat eine Site sehr viele Bilder (z. B. 200), dauert
die volle Abdeckung mehrere Scans. Zum schnelleren Aufbau kann `max_images_per_scan` vorübergehend
erhöht werden. In dieser Phase markiert die KI auch legitime Inhalte (z. B. Marken-/Partnerlogos
auf Firmenseiten) — diese werden einmalig mit `ai-dismiss --hash <fp>` akzeptiert. Da die Quittung
am **Byte-Hash** hängt, wird ein später ausgetauschtes Bild (andere Bytes → neuer Hash) automatisch
neu geprüft und nicht stillschweigend mitakzeptiert.
- **Geänderte/neue Inhalte werden IMMER sofort geprüft** — ungeachtet jeder Drossel. Fügt jemand
ein Bild auf einer Seite ein, ändert sich diese Seite → das Bild wird im selben Scan analysiert.
- **`max_pages_per_scan` / `max_images_per_scan` drosseln nur den historischen Altbestand**, und
ihr **Default ist `0` = unbegrenzt**: Der erste Scan deckt den kompletten Bestand ab. Dank des
Hash-Caches ist das eine einmalige Ausgabe (wenige Cent); Folge-Scans prüfen nur noch Neues.
- Ein **positiver** Wert ist nur für *sehr große* Sites (z. B. 10.000 Bilder) gedacht, um die
erste Volldurchsicht über mehrere Scans zu strecken. Selbst dann werden geänderte/neue Inhalte
weiter sofort geprüft.
Hinweis zur Byte-Änderung bekannter Bilder auf stabilen Seiten: Diese deckt die Datei-Prüfung
(`check-assets`) ab — sie schlägt an, wenn sich der Inhalt einer bekannten Datei ändert.
**Initiale Einrichtung:** Beim ersten vollen Durchlauf markiert die KI auch legitime Inhalte
(z. B. Marken-/Partnerlogos auf Firmenseiten) — diese werden einmalig mit `ai-dismiss --hash <fp>`
akzeptiert. Da die Quittung am **Byte-Hash** hängt, wird ein später ausgetauschtes Bild
(andere Bytes → neuer Hash) automatisch neu geprüft und nicht stillschweigend mitakzeptiert.
Hinweis zur Byte-Änderung bekannter Bilder auf stabilen Seiten: Diese deckt zusätzlich die
Datei-Prüfung (`check-assets`) ab — sie schlägt an, wenn sich der Inhalt einer bekannten Datei ändert.
Audio- und Video-Prüfung sind als abschaltbare Erweiterungspunkte vorbereitet
(`ai_analysis.audio` / `ai_analysis.video`, default deaktiviert) und können aktiviert werden,