a) CORS — server.py:91-96: allow_origins=["*"].
server.py:91-96
allow_origins=["*"]
b) Fehlende Security-Header: keine CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy.
c) Token in sessionStorage — index.html:808,1092: XSS-zugaenglich. Kombiniert mit #3 -> Diebstahl-Vektor.
index.html:808,1092
@app.middleware("http") async def security_headers(request, call_next): resp = await call_next(request) resp.headers["X-Content-Type-Options"] = "nosniff" resp.headers["X-Frame-Options"] = "DENY" resp.headers["Referrer-Policy"] = "strict-origin-when-cross-origin" return resp
Token in HttpOnly+SameSite-Cookie statt sessionStorage (groesserer Umbau - separat besprechen).
Fix (a) und (b) umgesetzt in server.py:
server.py
CORS — statt allow_origins=["*"] jetzt allow_origin_regex fuer localhost, 127.0.0.1 und lxc<id>-<port>.<domain> (VCH Subdomain-Proxy). Fremde Origins werden geblockt.
allow_origin_regex
localhost
127.0.0.1
lxc<id>-<port>.<domain>
Security-Header-Middleware: X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Referrer-Policy: strict-origin-when-cross-origin, Permissions-Policy: geolocation=(), microphone=(), camera=().
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=()
CSP wurde bewusst weggelassen, weil die App inline-Scripts/Styles nutzt - das waere ein eigener Refactor.
Teil (c) HttpOnly-Cookie ist als separates Issue #28 ausgegliedert (groesserer Umbau).
Manueller Test: erlaubte Origin gibt korrekten allow-origin-Header zurueck, evil.com gar keinen.
evil.com
No dependencies set.
The note is not visible to the blocked user.
Probleme
a) CORS —
server.py:91-96:allow_origins=["*"].b) Fehlende Security-Header: keine CSP, X-Content-Type-Options, X-Frame-Options, Referrer-Policy.
c) Token in sessionStorage —
index.html:808,1092: XSS-zugaenglich. Kombiniert mit #3 -> Diebstahl-Vektor.Fix-Direction
Token in HttpOnly+SameSite-Cookie statt sessionStorage (groesserer Umbau - separat besprechen).
Fix (a) und (b) umgesetzt in
server.py:CORS — statt
allow_origins=["*"]jetztallow_origin_regexfuerlocalhost,127.0.0.1undlxc<id>-<port>.<domain>(VCH Subdomain-Proxy). Fremde Origins werden geblockt.Security-Header-Middleware:
X-Content-Type-Options: nosniff,X-Frame-Options: DENY,Referrer-Policy: strict-origin-when-cross-origin,Permissions-Policy: geolocation=(), microphone=(), camera=().CSP wurde bewusst weggelassen, weil die App inline-Scripts/Styles nutzt - das waere ein eigener Refactor.
Teil (c) HttpOnly-Cookie ist als separates Issue #28 ausgegliedert (groesserer Umbau).
Manueller Test: erlaubte Origin gibt korrekten allow-origin-Header zurueck,
evil.comgar keinen.