ci(quick-261009-p0m): ZAP-Grundpruefung gegen alpha vor Freigaben, erster Lauf

- zap-baseline.sh: passive Aussenpruefung mit festgelegtem ZAP-Abbild, Ziel per ZAP_TARGET (Standard: oeffentliche Adresse von alpha), Anmeldedatei-Weg nur fuer den Ausnahmefall
- zap-hooks.py: Spinne fuellt keine Formulare aus und sendet keine (POST=0 lokal bewiesen)
- Sicherheitsprotokoll: Abschnitt Pruefung von aussen, erster Lauf direkt gegen die Anwendung (0 hoch, 2 mittel, 6 niedrig, 3 Info), Einordnung und Verlauf
- Betriebsanleitung Kapitel 9: Schritt Pruefung von aussen; Entwicklungsanleitung: Abschnitt ZAP; CHANGELOG

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-09 19:43:46 +02:00
parent 5b36b9a564
commit 13571df994
6 changed files with 276 additions and 2 deletions
+32
View File
@@ -0,0 +1,32 @@
"""zap-hooks.py -- Haken fuer die ZAP-Grundpruefung (quick-261009-p0m).
Wird von .gitea/scripts/zap-baseline.sh schreibgeschuetzt in den ZAP-Container
eingebunden und mit `--hook=` geladen. Nur Standardbibliothek.
Aufgaben:
1. Die klassische Spinne soll Formulare weder ausfuellen noch absenden. So bleibt
die Pruefung rein passiv: es werden nur Seiten abgerufen (GET), nie Daten
an die Anwendung geschickt (kein POST).
2. Nur wenn die Umgebungsvariable ZAP_BASIC_AUTH gesetzt ist (Anmeldedatei-Weg des
Skripts), wird ein Ersetzungsregel fuer den Kopf Authorization eingetragen.
Der Wert steht nie in einem Aufruf oder einer Ausgabe.
"""
import os
def zap_started(zap, target):
# Keine Formulare verarbeiten, keine Formulare absenden.
zap.spider.set_option_process_form(False)
zap.spider.set_option_post_form(False)
auth = os.environ.get("ZAP_BASIC_AUTH")
if auth:
zap.replacer.add_rule(
description="basicauth",
enabled=True,
matchtype="REQ_HEADER",
matchstring="Authorization",
matchregex=False,
replacement=auth,
initiators="",
)