Deutsch | English
Professionelle defensive Fullstack-Web-App zur sicheren Analyse von Domains oder IPs. Die Anwendung führt ausschliesslich passive oder risikoarme Checks aus, speichert Reports und visualisiert Ergebnisse in einem React-Dashboard.
Viele kleine Websites haben offensichtliche Sicherheitslücken in der Konfiguration, zum Beispiel fehlende Security Header, unsaubere TLS-Einstellungen oder offen erreichbare Standardports. VSW hilft, solche risikoarmen, passiven Checks lokal nachvollziehbar auszuführen und Reports so darzustellen, dass technische Findings, Evidenz und Empfehlungen schneller verständlich werden.
- Domains oder IPs defensiv und lokal prüfen
- HTTP Security Header, TLS-Zustand und eine kleine sichere Portliste auswerten
- Reports speichern, vergleichen und exportieren
- Findings mit Risiko, Evidenz und Empfehlung erklären
- Browser-Link-Prüfungen über eine lokale Extension vorbereiten
- ein Fullstack-Security-Projekt für Portfolio und IMS-Recruiting verständlich zeigen
- Projektarchitektur und Zielbild: docs/architecture-plan.md
- Demo- und User-Guide: docs/demo-guide.md
- Mobile- und PWA-Zielbild: docs/mobile-plan.md
- Backend-Setup und API-Hinweise: backend/README.md
- Mehrsprachige Benutzeranleitungen: EN, DE, HU, SR, RU
- Windows-Launcher für Ein-Klick-Start: launch_vsw_launcher.ps1
- Windows-Shortcut-Installer: install_vsw_launcher.ps1
- Browser-Extension-MVP:
extensions/vsw-link-capture
Dieses Projekt ist bewusst defensiv gebaut.
- Keine Exploits
- Kein Brute Force
- Keine aggressiven Port- oder Service-Scans
- Keine Umgehung von Schutzmechanismen
- Keine Authentifizierungsversuche
Nur eigene Systeme oder Systeme mit ausdrücklicher Erlaubnis prüfen.
- Backend: FastAPI, SQLAlchemy, PostgreSQL (lokal optional SQLite)
- Frontend: React, TypeScript, Vite
- Infrastruktur: Docker, Docker Compose
- Tests: Pytest, Vitest, Testing Library
- Lokale Bedienung: Windows-Launcher auf Python-Basis
- Browser-Integration: Manifest-V3-Extension für Link-Capture
- Mobile/PWA: installierbares React-Frontend mit Webmanifest, ohne Offline-Scan-Versprechen
- Frontend-Sprachen: Englisch, Deutsch, Ungarisch, Serbisch, Russisch
- Target-Eingabe mit Domain-/IP-Validierung
- Warnhinweis zur autorisierten Nutzung
- HTTP Security Header Check
- TLS-/Zertifikatsanalyse
- Sicherer Port-Check auf kleiner Standardliste
- Misconfiguration-Erkennung mit Empfehlungen
- Erweiterte Read-only Checks für unsichere Header-Werte und Cookie-Flags
- Zusätzliche TLS-Read-only Regel bei bald ablaufenden Zertifikaten
- Niedrig gewichteter Härtungshinweis bei nicht bestätigter TLS 1.3 Unterstützung
- Report-Scoring von 0 bis 100
- Persistente Reports mit Detailansicht
- Dashboard-Gruppierung nach Score-Klassen:
75+,50+,25+,0+ - Export von Reports als JSON und CSV
- Verlauf pro Target mit einfacher Trendanzeige
- Erweiterbare Findings-Liste mit Mehr/Weniger-Ansicht
- Guided link checks für same-origin Links mit klickbarer Prüfstrecke
- Windows-Launcher-App für Setup, Start, Browser-Open und Service-Stop ohne Terminal-Jonglage
- Browser-Extension-MVP für Link-Capture zum lokalen Backend
- Live-Capture für normale In-Page-Link-Klicks mit Pre-Scan vor Navigation
- Extension-Settings direkt in der lokalen VSW-App, inklusive Mindestscore für Besuchsfreigabe
- Host-Regeln für regelmässig geprüfte Websites: Minimum-Score ignorieren oder Host vertrauen
- Mobile-taugliches Dashboard für 360px bis 430px Breite mit besser antippbaren Controls
- PWA-Grundlage mit Manifest, Mobile-Meta-Tags, App-Name, Theme-Farbe und vorhandenen Icons
- Sprachumschalter mit Speicherung in
localStorage - Dashboard mit Status, Datum und Score
- Background-Scan-Ausführung im Backend
- Einfache Missbrauchsbremse per Rate-Limit
Strict-Transport-SecurityContent-Security-PolicyX-Frame-OptionsX-Content-Type-OptionsReferrer-PolicyPermissions-Policy
- HTTPS erreichbar oder nicht
- Zertifikat vorhanden
- Zertifikat gültig oder abgelaufen
- Ablaufdatum
- Issuer
- Sicher prüfbare TLS-Versionen (
TLSv1.2,TLSv1.3)
804432225533306543263798080
Ergebnis pro Port:
openclosedtimeout
Beispiele für abgeleitete Findings:
- HTTPS nicht erreichbar
- Unsichere HTTP-Redirects
- Fehlende Security Header
- Unsichere CSP- oder Referrer-Policy-Werte
- Schwache
Strict-Transport-Securitymax-age-Werte - Ineffektive
X-Content-Type-OptionsWerte - Zu breit erlaubende
Permissions-PolicyWerte - Fehlende Secure-/HttpOnly-Cookie-Flags
- Offene Datenbankports
- Abgelaufenes TLS-Zertifikat
- Bald ablaufendes TLS-Zertifikat
- Startwert:
100 - Abzug pro
high:25 - Abzug pro
medium:12 - Abzug pro
low:5 - Untergrenze:
0
Jeder Finding-Eintrag enthält:
- Risikostufe
- technische Beschreibung
- Evidenz
- konkrete Empfehlung
GET /api/v1/healthPOST /api/v1/scansGET /api/v1/scansGET /api/v1/scans/{scan_id}GET /api/v1/scans/{scan_id}/historyGET /api/v1/scans/{scan_id}/links?limit=12GET /api/v1/scans/{scan_id}/export?format=jsonGET /api/v1/scans/{scan_id}/export?format=csv
Die Snapshot-Metadaten enthalten zusätzlich beobachtete Security Header, Redirect-Ziel und fehlende Header für schnellere Evidenzprüfung.
- Für Windows ist die Launcher-App der empfohlene Startweg, weil sie Python 3.12+ erkennt, Setup anstosst und Frontend plus Backend gemeinsam startet.
- Export ist aktuell für abgeschlossene Scans gedacht.
- JSON-Export wird lesbar formatiert bereitgestellt.
- Die Verlaufsansicht gruppiert Scans über
normalized_targetund zeigt neue Einträge zuerst. - Die Trendanzeige ist bewusst einfach gehalten: verbessert, verschlechtert oder stabil im Vergleich zum vorherigen Score.
- Guided link checks bleiben defensiv: nur same-origin Links, keine Auth-Bypass-Logik, keine aggressiven Crawl-Strategien.
- Die Browser-Extension ist nur ein Trigger für Folge-Scans im lokalen VSW-Backend und enthält keine eigene Scan-Engine.
- Auf Mobile ist VSW zuerst Dashboard, Scanner und Report-Viewer. Globales Link-Blocking wie bei der Desktop-Extension ist dort nicht das Ziel.
Ordner: extensions/vsw-link-capture
Funktionen:
- Kontextmenü:
Scan link with VSWbei Link-Rechtsklick - Kontextmenü:
Scan current tab with VSW - Popup-Button:
Scan current page - Popup-Feld:
Scan and visit target - Konfigurierbarer Mindestscore vor Weiterleitung
- Live-Capture für normale In-Page-Link-Klicks mit Pre-Scan vor Navigation
- Best-effort passive Navigationserfassung über
webNavigationnach dem Laden - Popup zeigt nur Status und Schnellaktionen; die Visit-Gate-Einstellungen werden in der lokalen VSW-App verwaltet
- Host-Regeln in der lokalen VSW-App für häufig genutzte Websites
- Trigger an lokales Backend:
POST http://127.0.0.1:8000/api/v1/scans - Erfolg: VSW-Detailseite für den neuen Scan wird bei Popup- oder Kontext-Trigger geöffnet
- Runtime-Fallback: Falls die Extension in einem bereits offenen Tab deaktiviert, neu geladen oder entfernt wurde, bleibt die Seite nicht dauerhaft hängen. Nach kurzer Fehlertoleranz wird die Navigation normal fortgesetzt.
- Backend-Health-Check vor Scan-Erstellung: Wenn Backend oder Launcher offline sind, werden keine Phantom-Scans als erstellt angezeigt.
- Popup-Status für Backend Online/Offline mit
Retry connection.
Wichtige Opera-/Chrome-Hinweise:
- Nach dem Laden der Extension
Developer modeaktiv lassen - In
Detailsden Website-Zugriff aufAuf allen Websitessetzen - Nach Änderungen oder nach erstem Laden die Zielseite mit
Ctrl+F5neu laden - Live-Capture mit Scan-vor-Besuch greift nur bei normalen Links im Seiteninhalt
- Adresszeile, Lesezeichenleiste, angeheftete Browser-Links, Tabs, Browser-Buttons und Links aus externen Apps wie WhatsApp, Mail oder Chat-Clients werden vom Browser selbst gesteuert. Manifest V3 erlaubt hier keinen zuverlässigen Block vor dem ersten Laden.
- Solche Browser- oder App-Navigationen können höchstens nach dem Laden passiv erkannt werden, wenn die Extension aktiv ist, die Seite Extension-Zugriff erlaubt und das lokale Backend läuft. Das ist ein Best-effort-Report, kein Schutzversprechen.
- Für echtes Scan-vor-Besuch bei manuell eingegebenen Domains das Popup-Feld
Scan and visit targetnutzen - Der Mindestscore wird in der VSW-App unter
Visit gate settingsangepasst, wenn die Extension geladen ist und Website-Zugriff auflocalhost/127.0.0.1hat - Im Bereich
Website ruleskönnen regelmässig gescannte Hosts verwaltet werden.Ignore minimum scorescannt weiterhin, blockiert aber nicht wegen dem Score.Trust siteerlaubt Navigation für diesen Host ohne Blocking. - Nach Sleep, Browser-Neustart oder Extension-Reload werden Host-Regeln neu aus dem Storage geladen und normalisiert.
www.github.com,github.comund URL-basierte Regeln werden auf denselben Host zurückgeführt. - Wenn Backend/Frontend nicht laufen, zeigt das Frontend einen Offline-Status und einen
Reconnect-Button, statt alte Scan-Daten als live darzustellen.
VSW darf nicht so erklärt werden, als könnte die Extension jeden Browser- oder Systemklick vorab kontrollieren. Für den Release gilt diese klare Abgrenzung:
- Zuverlässig: normale Links innerhalb einer geladenen Webseite, Kontextmenü-Aktionen und das Popup-Feld
Scan and visit target. - Best effort: Adresszeile, Lesezeichenleiste, angeheftete Browser-Links und Links aus externen Apps. Diese Aufrufe können je nach Browser erst nach dem Laden erkannt werden.
- Nicht versprochen: vollständiges globales Link-Blocking, Kontrolle über andere Apps oder garantierter Pre-Scan für bereits geöffnete Tabs ohne Reload.
Wenn ein Nutzer eine Domain sicher vor dem Besuch prüfen will, soll er Scan and visit target in der Extension nutzen oder die Domain direkt im VSW-Dashboard scannen.
Score-Gruppen im Dashboard:
75+: gute Reports50+: mittlere Reports25+: schwache Reports0+: kritische ReportsPending: laufende oder wartende Scans
Installationsanleitung und manuelle Test-Checkliste:
extensions/vsw-link-capture/README.md
Das Frontend ist für Handy-Breiten vorbereitet und kann als PWA im mobilen Browser installiert werden, wenn der Browser Webmanifest-Installation unterstützt.
Wichtige Punkte:
- Mobile nutzt dieselbe Backend-API wie das Desktop-Frontend.
- Das Backend muss vom Handy erreichbar sein, zum Beispiel über die lokale Netzwerkadresse des Rechners oder einen Server.
- Es gibt bewusst keinen Service Worker und kein Offline-Versprechen.
- Die PWA ersetzt nicht die Desktop-Browser-Extension.
- Globales Link-Blocking ist auf Mobile nicht zuverlässig verfügbar und bleibt nicht Hauptziel.
- Eine APK ist ein möglicher nächster Schritt über Capacitor, aber noch nicht Teil dieser Umsetzung.
Empfohlene Tests:
- Browser DevTools Mobile View mit 360px bis 430px Breite
- echtes Handy im gleichen Netzwerk, wenn Backend-URL und CORS passend konfiguriert sind
cd frontend && npm run lintcd frontend && npm test -- --runcd frontend && npm run build
Set-Location -LiteralPath "<repo-pfad>"
.\launch_vsw_launcher.ps1Die Launcher-App ist der bevorzugte Weg für lokale Entwicklung und manuelle Demos unter Windows:
- erkennt Python
3.12+automatisch - erstellt bei Bedarf
backend/.venv - installiert fehlende Abhängigkeiten
- startet Backend und Frontend ohne zwei offene Terminal-Fenster
- erkennt bereits belegte Ports
8000und5173und meldet klar, dass ein vorhandener Dienst wiederverwendet wird - öffnet App und API-Doku direkt aus der GUI
- kann eine Desktop-Verknüpfung für den App-Start anlegen
- kann einen Windows-Autostart-Eintrag anlegen, damit Backend und Frontend nach dem Login automatisch starten
- stoppt beide Services wieder sauber
Set-Location -LiteralPath "<repo-pfad>"
.\install_vsw_launcher.ps1Optional mit Startmenü-Eintrag:
.\install_vsw_launcher.ps1 -StartMenuOptional mit Windows-Autostart:
.\install_vsw_launcher.ps1 -StartupDer Autostart-Eintrag öffnet nach dem Windows-Login den Launcher, startet Backend und Frontend automatisch und öffnet das lokale Dashboard einmal im Browser. Dadurch muss VSW nach einem Laptop-Neustart nicht mehr manuell mit zwei Terminal-Kommandos gestartet werden.
Autostart wieder entfernen:
.\install_vsw_launcher.ps1 -RemoveStartupDie Verknüpfung startet die Launcher-App. Der Launcher richtet bei Bedarf Backend und Frontend ein, zeigt Logs an und stoppt nur die Dienste, die er selbst gestartet hat.
Aktuell ist der Windows-Launcher der empfohlene lokale Weg, weil er die vorhandene Backend-/Frontend-Struktur nutzt und keine zweite Scanner-Engine einführt. Für eine spätere Abgabe an Nutzer ohne Python ist Docker Desktop der realistische nächste Schritt. Eine native Desktop-App mit Tauri oder Electron bleibt sinnvoll, ist aber grösser und sollte erst umgesetzt werden, wenn der lokale Scanner-Workflow stabil bleibt.
Set-Location -LiteralPath "<repo-pfad>"
.\dev.ps1Optional ohne erneute Dependency-Installation:
.\dev.ps1 -SkipInstallcd backend
python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'
uvicorn app.main:app --reloadOhne zusätzliche Umgebungsvariablen nutzt das Backend lokal standardmässig sqlite:///./vsw.db.
Standard-URL: http://localhost:8000
cd frontend
npm install
npm run devStandard-URL: http://localhost:5173
Das Frontend erwartet standardmässig die API unter http://localhost:8000/api/v1.
- Keine CVE-Korrelation aus Service-Bannern
- Keine tiefen Fingerprinting-Mechanismen
- Keine Auth- oder Session-Prüfungen
- Keine Content-Audits der Zielapplikation
- Keine externen Asset- oder JS-Dependency-Analysen
- Keine tiefgehende Langzeit-Trendanalyse über viele Zeiträume
- Keine Vollscanner-Extension direkt im Browser, weil die eigentlichen defensiven Checks bewusst im lokalen Backend bleiben
- Browser-Limitation: Bereits injizierte Content Scripts können in offenen Tabs bis zum Reload verbleiben. Der Extension-Fallback verhindert dauerhaft kaputte Tabs, indem er bei Runtime-Verlust nach kurzer Wartezeit weiterleitet.
- Browser-Limitation: Adresszeile, Lesezeichenleiste, angeheftete Browser-Links und externe App-Links lassen sich mit Manifest V3 nicht zuverlässig vor dem ersten Laden blockieren.
- Kein mobiles globales Link-Blocking wie auf Desktop-Browsern mit Extension
- Kein Offline-Scan in der PWA, weil Backend, Netzwerk und Datenbank erreichbar sein müssen
- PDF-Export für Reports
- Authentifizierung und Team-Workspaces
- Scheduling für regelmässige Scans
- Grössere OWASP-orientierte Read-only Checklisten über die aktuelle v1-Erweiterung hinaus
- Native APK-/Capacitor-Projektstruktur inklusive Android-Build, Signierung und Store-Verteilung
- Beispiel-Konfiguration kopieren:
cp .env.example .env- Stack starten:
docker compose up --build- Services:
- Frontend:
http://localhost:8080 - Backend API:
http://localhost:8000 - PostgreSQL:
localhost:5432
Hinweis: Der Windows-Launcher nutzt im Entwicklungsmodus standardmässig 5173 für das Vite-Frontend. Docker veröffentlicht das gebaute Frontend standardmässig auf 8080. Die Browser-Extension ist auf den Launcher-/Entwicklungsmodus mit 127.0.0.1:8000 und 127.0.0.1:5173 ausgerichtet. Für Docker-Demos ohne Launcher wird das Dashboard über http://localhost:8080 geöffnet; die Extension sollte danach separat auf die aktuelle Release-Konfiguration geprüft werden.
Siehe .env.example.
DATABASE_URLCORS_ORIGINSRATE_LIMIT_MAX_REQUESTSRATE_LIMIT_WINDOW_SECONDSENABLE_BACKGROUND_SCANSVITE_API_BASE_URL
cd backend
. .venv/bin/activate
pytest
ruff check .cd frontend
npm run lint
npm test
npm run buildnode --check extensions/vsw-link-capture/background.js
node --check extensions/vsw-link-capture/content-script.js
node --check extensions/vsw-link-capture/popup.js
node --check extensions/vsw-link-capture/runtime-fallback.js
node --test extensions/vsw-link-capture/score-gate.test.cjs
node --test extensions/vsw-link-capture/runtime-fallback.test.cjs- Description:
Defensive fullstack vulnerability scanner for passive website checks, reports and browser-assisted link review. - Topics:
security,fastapi,react,typescript,vulnerability-scanner,passive-scanner,tls,security-headers,portfolio-project
- Scans werden als Datenbankeintrag erstellt und per Background-Runner verarbeitet.
- Findings und Report-Snapshots werden persistiert.
- Das Frontend lädt Listen- und Detaildaten separat.
- CORS ist für lokale Frontend-/Backend-Trennung konfigurierbar.
- Der Windows-Launcher ist eine Bedien-Schicht über dem bestehenden Backend und Frontend, keine alternative Scanner-Engine.
| Teil | Rolle |
|---|---|
| Backend | Scanner-Engine, Datenpersistenz, API und Score-Berechnung |
| Frontend | Haupt-Dashboard, Reports, Score-Gruppen, Visit-Gate-Einstellungen und Safety-Meldungen |
| Extension Background | Browser-Gatekeeper für Pre-Scan, Score-Entscheid und Navigation |
| Content Script | Klick-Abfang, kurze Browser-Toasts und Weiterleitung der Entscheidung |
| Extension Popup | Mini-Fallback für Schnellscan, manuelle Zielprüfung, Dashboard-Link und Statusübersicht |
| Windows-Launcher | Lokaler Starter für Setup, Backend, Frontend, App-Link und Logs |
Die Extension soll keine zweite Dashboard-Oberfläche sein. Sie schützt den aktuellen Browserfluss und zeigt nur kurze Sofortmeldungen. Die längerfristige Erklärung, Konfiguration und Auswertung bleibt im Frontend.
- PDF-Export mit Layout für Sharing und Audits
- Erweiterte Trendansicht (Zeitreihen, Vergleich mehrerer Scans)
- Weitere OWASP-orientierte Read-only Check-Module
- Optionales, kontrolliertes Scheduling mit klaren Limits
- Rollen-/Rechtemodell für Team-Nutzung
- Browser-Extension-Ausbau mit klarerem Statusbild für aktive Pre-Scans und bekannte Browser-Limitationen
- Capacitor-Schale für Android, sobald API-Basis-URL, CORS, Zertifikate und Signierung geklärt sind