Fed*_*ali 5 java sanitization html-sanitizing jsoup
我正在使用Jsoup和轻松的白名单.它似乎很完美,但我想保持嵌入的图像标签<img alt="" src="data:;base64.
有没有办法修改白名单也接受那些img?
编辑:
如果我使用Whitelist.relaxed().addProtocols("img","src","data")那么那些img标签不会被删除.但它接受"data:"之后的任何内容,如果src内容以"data:; base64"开头,我想保留它们.jsoup有可能吗?
Jef*_*oom 10
您可以扩展Whitelist并覆盖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);
}
}
Run Code Online (Sandbox Code Playgroud)
由于您尚未提供用于解析的代码或正在清理的HTML,因此我没有对此进行测试.
| 归档时间: |
|
| 查看次数: |
4754 次 |
| 最近记录: |