7

緩和されたホワイトリストで Jsoup を使用しています。完璧に思えますが、埋め込まれた画像タグを<img alt="" src="data:;base64.

それらの img も受け入れるようにホワイトリストを変更する方法はありますか?

編集

使用するWhitelist.relaxed().addProtocols("img","src","data")と、それらの img タグは削除されません。ただし、「data:」の後には何でも受け入れます。src コンテンツが「data:;base64」で始まる場合は、それらを保持したいと思います。jsoupで可能ですか?

4

1 に答える 1

11

ホワイトリストを拡張し、 isSafeAttributeをオーバーライドして、カスタム チェックを実行できます。Whitelist.relaxed() を直接拡張する方法はないため、同じリストを設定するにはいくつかのコードをコピーする必要があります。

public class RelaxedPlusDataBase64Images extends Whitelist {
    public RelaxedPlusDataBase64Images() {
        //copied from Whitelist.relaxed()
        addTags("a", "b", "blockquote", "br", "caption", "cite", "code", "col",
                "colgroup", "dd", "div", "dl", "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6",
                "i", "img", "li", "ol", "p", "pre", "q", "small", "strike", "strong",
                "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u",
                "ul");
        addAttributes("a", "href", "title");
        addAttributes("blockquote", "cite");
        addAttributes("col", "span", "width");
        addAttributes("colgroup", "span", "width");
        addAttributes("img", "align", "alt", "height", "src", "title", "width");
        addAttributes("ol", "start", "type");
        addAttributes("q", "cite");
        addAttributes("table", "summary", "width");
        addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width");
        addAttributes("th", "abbr", "axis", "colspan", "rowspan", "scope", "width");
        addAttributes("ul", "type");
        addProtocols("a", "href", "ftp", "http", "https", "mailto");
        addProtocols("blockquote", "cite", "http", "https");
        addProtocols("cite", "cite", "http", "https");
        addProtocols("img", "src", "http", "https");
        addProtocols("q", "cite", "http", "https");
    }

    @Override
    protected boolean isSafeAttribute(String tagName, Element el, Attribute attr) {
        return ("img".equals(tagName)
                && "src".equals(attr.getKey())
                && attr.getValue().startsWith("data:;base64")) ||
            super.isSafeAttribute(tagName, el, attr);
    }
}

解析に使用しているコードまたはサニタイズしている HTML を提供していないため、これをテストしていません。

于 2014-06-30T19:57:11.607 に答える