Sicherheit: SVG-Upload für Logo/Favicon nicht mehr erlaubt

Der Branding-Upload akzeptierte bisher jeden Dateityp, der clientseitig
mit "image/" beginnt, inkl. SVG. Anders als beim vorherigen Supabase-
Storage-Bucket (andere Origin) wird die Datei jetzt auf der eigenen
Origin unter /branding/[filename] ausgeliefert – eine SVG mit
eingebettetem <script> hätte bei direktem Aufruf der Datei-URL
(z. B. "Bild in neuem Tab öffnen") mit dem Session-Cookie eines
anderen Admins ausgeführt werden können und wäre dabei auch am
CSRF-Schutz vorbeigekommen (Origin stimmt ja).

Upload-Route erlaubt jetzt nur noch eine Whitelist an Rasterformaten
(png/jpg/webp/gif/ico), die Dateiendung wird aus dem geprüften
MIME-Typ abgeleitet statt aus dem vom Client gesendeten Dateinamen.
Die Ausliefer-Route kennt "svg" als Content-Type nicht mehr (Defense
in Depth). Gefunden bei der Sicherheitsprüfung vor dem Merge nach
master.
This commit is contained in:
2026-07-18 11:58:07 +02:00
parent 3d13ba88f4
commit 0958abaac6
3 changed files with 25 additions and 5 deletions
+2 -2
View File
@@ -164,7 +164,7 @@ export default function DesignEditor() {
{dict.designEditor.logoUpload}
<input
type="file"
accept="image/*"
accept="image/png,image/jpeg,image/webp,image/gif,image/x-icon"
className="hidden"
onChange={(e) => uploadAsset("logo", e)}
disabled={busy}
@@ -201,7 +201,7 @@ export default function DesignEditor() {
{dict.designEditor.faviconUpload}
<input
type="file"
accept="image/*"
accept="image/png,image/jpeg,image/webp,image/gif,image/x-icon"
className="hidden"
onChange={(e) => uploadAsset("favicon", e)}
disabled={busy}