{
    "id": "20260624-164015-mail.djswiss.ch-7e1b4907",
    "type": "scan_report",
    "created_at": "2026-06-24T16:40:15+00:00",
    "scan": {
        "tool": "DJSWISS Safe Site Checker Pro",
        "version": "3.0-sales-ready",
        "mode": "defensive_passive_authorized",
        "started_at": "2026-06-24T16:40:14+00:00",
        "finished_at": "2026-06-24T16:40:15+00:00",
        "target": {
            "input_url": "https://mail.djswiss.ch/",
            "normalized_url": "https://mail.djswiss.ch/",
            "effective_url": "https://mail.djswiss.ch/",
            "host": "mail.djswiss.ch",
            "http_status": 200
        },
        "score": {
            "points": 0,
            "grade": "E"
        },
        "summary": {
            "critical": 1,
            "high": 4,
            "medium": 1,
            "low": 3,
            "info": 6
        },
        "meta": {
            "dns_targets": [
                "148.251.1.89"
            ],
            "http_redirect_effective_url": "https://mail.djswiss.ch/",
            "tls": {
                "subject": "mail.djswiss.ch",
                "issuer": "Let's Encrypt",
                "valid_to": "2026-09-19T20:35:46+00:00",
                "days_left": 87
            },
            "dns": {
                "txt": [
                    "v=spf1 mx ip4:148.251.1.89 ip4:148.251.1.79 -all"
                ],
                "dmarc": "v=DMARC1; p=quarantine; rua=mailto:postmaster@djswiss.ch; ruf=mailto:postmaster@djswiss.ch; fo=1",
                "mx": [],
                "caa_count": 0
            }
        },
        "findings": [
            {
                "severity": "medium",
                "category": "Mittel",
                "title": "Content-Security-Policy fehlt",
                "evidence": "CSP Header nicht gefunden",
                "fix": "CSP schrittweise einführen; zuerst Report-Only testen, danach strenger aktivieren."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "Permissions-Policy fehlt",
                "evidence": "Permissions-Policy Header nicht gefunden",
                "fix": "Nicht benötigte Browser-Features explizit deaktivieren."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "Cross-Origin-Opener-Policy fehlt",
                "evidence": "COOP Header nicht gefunden",
                "fix": "Optional: Cross-Origin-Opener-Policy: same-origin für isolierte Browser-Kontexte prüfen."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "Technologie-Information sichtbar: server",
                "evidence": "Apache",
                "fix": "Versionen und Framework-Banner soweit möglich ausblenden; wichtiger: Systeme aktuell halten."
            },
            {
                "severity": "low",
                "category": "Niedrig",
                "title": "Cookie ohne SameSite",
                "evidence": "roundcube_sess",
                "fix": "SameSite=Lax oder Strict setzen; bei externen Login-Flows bewusst prüfen."
            },
            {
                "severity": "high",
                "category": "Hoch",
                "title": "Fehlermeldungen im HTML sichtbar",
                "evidence": "Debug-/PHP-/Stacktrace-Hinweise gefunden",
                "fix": "Debug-Ausgaben deaktivieren; Fehler serverseitig loggen, nicht öffentlich anzeigen."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "Keine MX Records gefunden",
                "evidence": "djswiss.ch",
                "fix": "Falls die Domain E-Mail empfängt, MX Records prüfen."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "CAA Record fehlt",
                "evidence": "djswiss.ch",
                "fix": "Optional CAA setzen, um Zertifizierungsstellen einzuschränken."
            },
            {
                "severity": "info",
                "category": "Info",
                "title": "security.txt ohne Contact",
                "evidence": "https://mail.djswiss.ch/.well-known/security.txt",
                "fix": "Contact-Zeile ergänzen, damit Meldungen ankommen."
            },
            {
                "severity": "high",
                "category": "Hoch",
                "title": "SVN-Verzeichnis öffentlich erreichbar",
                "evidence": "https://mail.djswiss.ch/.svn/entries liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            },
            {
                "severity": "high",
                "category": "Hoch",
                "title": "Backup-Datei möglicherweise öffentlich",
                "evidence": "https://mail.djswiss.ch/backup.zip liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            },
            {
                "severity": "high",
                "category": "Hoch",
                "title": "Backup-Datei möglicherweise öffentlich",
                "evidence": "https://mail.djswiss.ch/backup.tar.gz liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            },
            {
                "severity": "low",
                "category": "Niedrig",
                "title": "composer.lock öffentlich sichtbar",
                "evidence": "https://mail.djswiss.ch/composer.lock liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            },
            {
                "severity": "low",
                "category": "Niedrig",
                "title": "composer.json öffentlich sichtbar",
                "evidence": "https://mail.djswiss.ch/composer.json liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            },
            {
                "severity": "critical",
                "category": "Sofort beheben",
                "title": "Config-Backup öffentlich",
                "evidence": "https://mail.djswiss.ch/config.php~ liefert HTTP 200",
                "fix": "Datei sofort entfernen oder per Webserver blockieren; Secrets rotieren, falls Inhalte öffentlich waren."
            }
        ],
        "recommendations": [
            "Sofort sperren/entfernen, Secrets rotieren, danach Nachscan durchführen.",
            "Management informieren und Änderungsprotokoll sichern."
        ],
        "sales_hint": {
            "package": "Emergency Fix / Security Hardening",
            "suggested_price_chf": "590–1’500+",
            "reason": "Akute oder deutliche Risiken vorhanden."
        },
        "note": "This tool identifies visible weaknesses and safe fix guidance. It does not exploit, bypass authentication, brute-force, or provide intrusion steps."
    },
    "ai": null,
    "report_text": null
}