Watermark-Filter komplett kaputt: eingebettetes "?" in Logo-URL bricht URL-Parsing (Folgebug zu #32/#35) #38

Closed
opened 2026-08-09 17:08:03 +00:00 by csaeum · 0 comments
Owner

Symptom

Nach dem #35-Fix (Logo-URL wird nicht mehr rekursiv gewrappt) laden nach Aktivierung von remote_thumbnails weder im Admin noch im Storefront irgendwelche Bilder mit gesetztem ai_type — nicht nur ohne Wasserzeichen, sondern gar nicht.

Beispiel-URL aus dem Admin:

https://img.clicklocal.de/unsafe/0x0/filters:watermark(projektleder.de/media/70/07/1c/1754775997/Logo_Projektleder_DE_ohne_180x57.jpg?ts=1754775997,-5,-5,0):label(KI-generiert,-5,-60,16,white,10)/projektleder.de/media/31/f4/a9/.../....png?ts=...

Im gerenderten HTML zeigt sich ein asymmetrisches Encoding-Muster:

filters%3Awatermark%28projektleder.de/media/70/07/1c/1754775997/Logo_....jpg?ts=1754775997,-5,-5,0):label(KI-generiert,-5,-60,16,white,10)/projektleder.de/media/fc/d2/63/...png?ts=...

filters:watermark( wird prozentkodiert, alles ab dem ?ts=1754775997 in der Logo-URL (also ,-5,-5,0):label(...)/.../....png?ts=...) bleibt roh.

Root Cause

Die Logo-URL (.../Logo_....jpg?ts=1754775997) wird unverändert als watermark()-Filter-Argument eingebettet — inklusive ihrer eigenen Query-String. Alles, was diesen String als reguläre URL behandelt (Browser beim Setzen von <img src>, Lazy-Load-JS, Twig/URL-Normalisierung), interpretiert das erste unescapte ? in der gesamten URL als Beginn der Query-String der äußeren Ressource — das ist Standard-URL-Semantik (RFC 3986), kein Bug einer Zwischenschicht. Alles nach diesem ? rutscht aus dem Pfad, imagor bekommt nie den vollständigen Filter-Pfad.

Das war vermutlich schon beim ursprünglichen Issue #32 die eigentliche Ursache (nicht die dort vermutete "SSRF-Muster"-Sanitisierung) — die dortige verschachtelte https://...-URL hatte ebenfalls ein ?ts=....

Fix

Query-String der eingebetteten Logo-URL vor dem Einsetzen in den watermark()-Filter entfernen (die äußere Bild-URL am Pfadende ist davon nicht betroffen — deren ?ts= ist korrekt die Query-String der Gesamt-URL).

## Symptom Nach dem #35-Fix (Logo-URL wird nicht mehr rekursiv gewrappt) laden nach Aktivierung von `remote_thumbnails` weder im Admin noch im Storefront irgendwelche Bilder mit gesetztem `ai_type` — nicht nur ohne Wasserzeichen, sondern gar nicht. Beispiel-URL aus dem Admin: ``` https://img.clicklocal.de/unsafe/0x0/filters:watermark(projektleder.de/media/70/07/1c/1754775997/Logo_Projektleder_DE_ohne_180x57.jpg?ts=1754775997,-5,-5,0):label(KI-generiert,-5,-60,16,white,10)/projektleder.de/media/31/f4/a9/.../....png?ts=... ``` Im gerenderten HTML zeigt sich ein asymmetrisches Encoding-Muster: ``` filters%3Awatermark%28projektleder.de/media/70/07/1c/1754775997/Logo_....jpg?ts=1754775997,-5,-5,0):label(KI-generiert,-5,-60,16,white,10)/projektleder.de/media/fc/d2/63/...png?ts=... ``` `filters:watermark(` wird prozentkodiert, alles ab dem `?ts=1754775997` in der Logo-URL (also `,-5,-5,0):label(...)/.../....png?ts=...`) bleibt roh. ## Root Cause Die Logo-URL (`.../Logo_....jpg?ts=1754775997`) wird unverändert als `watermark()`-Filter-Argument eingebettet — inklusive ihrer eigenen Query-String. Alles, was diesen String als reguläre URL behandelt (Browser beim Setzen von `<img src>`, Lazy-Load-JS, Twig/URL-Normalisierung), interpretiert das **erste unescapte `?`** in der gesamten URL als Beginn der Query-String der äußeren Ressource — das ist Standard-URL-Semantik (RFC 3986), kein Bug einer Zwischenschicht. Alles nach diesem `?` rutscht aus dem Pfad, imagor bekommt nie den vollständigen Filter-Pfad. Das war vermutlich schon beim ursprünglichen Issue #32 die eigentliche Ursache (nicht die dort vermutete "SSRF-Muster"-Sanitisierung) — die dortige verschachtelte `https://...`-URL hatte ebenfalls ein `?ts=...`. ## Fix Query-String der eingebetteten Logo-URL vor dem Einsetzen in den `watermark()`-Filter entfernen (die äußere Bild-URL am Pfadende ist davon nicht betroffen — deren `?ts=` ist korrekt die Query-String der Gesamt-URL).
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
SW-Plugins/wsc_swplugin_aiseotools#38
No description provided.