2017-11-17 1 views
0

desinfizierenden würde ich erlauben mag:Wie eingebettete Bilder zu ermöglichen, wenn html mit OWASP Java HTML Sanitizer

<img src="data:image/jpg;base64,..."/> 

Ich sehe there's documentation on how to do this aber ich verstehe nicht, wie es zu implementieren. Ich habe versucht, das Muster

.allowUrlProtocols("data") 
.allowAttributes("src").matching(Pattern.compile("$data:image.*")).onElements("img") 

hinzuzufügen, aber das hat nicht funktioniert. Ich verstehe, dass das Muster ein Regexausdruck sein muss, aber ich bin nicht sicher, dass ich verstehe, wie es alles verbindet. Ich bekomme, dass es versucht, nach img-Tags zu suchen, und schaut sich dann das src-Attribut an. Mein Verständnis ist, dass es dann nach den String-Daten suchen soll: image und ob das Finds durchlässt. Aber das ist nicht passiert ...

+0

/muss mit \/zu entkommen –

+0

Ich dachte, es wäre eine Art verwandtes Problem Ich versuchte, das/zu entfernen, aber das Element trotzdem nicht erlaubt. Ich habe das/aus der Frage entfernt, um zu zeigen, dass dies nicht das Problem war. Aber guter Fang. –

+0

Nur ein FYI habe ich auch versucht, enthält nur Daten, wie in/Daten/aber das hat auch nicht funktioniert. Daher funktioniert auch nur ein einfacher Regex nicht oder der obige Setup-Code ist falsch ... –

Antwort

0

Das Problem ist, dass ich hatte:

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder() 
    .allowUrlProtocols("data") 
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL).onElements("img") 
    .allowAttributes("src").matching(Pattern.compile("^.*data:image/.*$")).onElements("img") 
    .toFactory(); 

Dies verursacht ein Problem, dass ich allowAttribute angenommen würde beides kombinieren. Stattdessen, was Sie tun müssen, ist, oder die Musterabgleich (für was auch immer Muster, das Sie passen wollen), wie in:

Pattern EMBEDDED_IMAGE = Pattern.compile("^.*data:image/.*$") 
ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE = matchesEither(ONSITE_URL, OFFSITE_URL, EMBEDDED_IMAGE); 

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder() 
    .allowUrlProtocols("data") 
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE).onElements("img") 
    .toFactory(); 

Dieser Code setzt voraus, Sie verwenden die EbayPolicyExample

Verwandte Themen