"""Non-régression de l'audit sécurité 2026-09-30 — A11 (traversal) et A18 (XSS public).""" from conftest import anon, anon_csrf def test_avatar_path_traversal_denied(client): """A11 : `:path` accepte les `/` — la lecture doit rester dans /data/avatars.""" r = client.get("/api/settings/avatar/..%2f..%2fetc%2fpasswd") assert r.status_code in (403, 404), r.status_code def test_public_view_escapes_output(client): """A18 : titre de base et titre de ligne interpolés dans un f-string HTML.""" cid = client.post("/db/api", json={"name": ""}).json()["id"] client.post(f"/db/{cid}/pages/api", json={"title": ""}) anon(client) r = client.get(f"/workspace/public/{cid}") assert r.status_code == 200 assert "