当前位置: 首页 > 面试题库 >

如何使Jsoup白名单接受某些属性内容

慕翰学
2023-03-14
问题内容

我正在将Jsoup与轻松的白名单一起使用。看起来很完美,但我想保留嵌入的图像标签,例如<img alt="" src="data:;base64

有没有办法修改白名单以接受这些img?

编辑

如果使用,Whitelist.relaxed().addProtocols("img","src","data")则不会删除那些img标签。但是它接受“
data:”之后的任何内容,如果src内容以“ data:; base64”开头,我只想保留它们。jsoup是否可能?


问题答案:

您可以扩展白名单并覆盖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,因此我没有对此进行测试。



 类似资料:
  • 我正在使用带有轻松白名单的J汤。它看起来很完美,但我想保持嵌入的图像标签,如

  • 问题内容: 是否有可能使用JSON路径找到与正则表达式模式匹配(或至少以开头)的属性 名称 。在XPath中,我可以使用,但无法找到等效的JSON Path 。 基本上,我要查找以开头的所有属性名称。有点像。 我将对使用任何执行此操作的 javascript软件包 感兴趣。目前,我正在使用JSONPath。 问题答案: 从我的谷歌搜索,这是不可能的标准。但是, JSONPath包使用扩展了规范;并

  • 我希望我的上载程序只允许这些类型: 文档,文档。 xls,xlsx。 ppt,pptx。 txt. pdf. 图像类型。 我怎样才能做到这一点呢?我应该在属性中放入什么?谢谢你的帮助。 编辑!!! 我还有一件事要问。当弹出窗口出现用于选择文件时,在右下角,有一个包含所有允许文件的下拉列表。在我的情况下,名单会很长。我在列表中看到,有一个名为的选项。我如何使它默认选择并消除所有其他选项? 任何帮助都

  • 嵌套异常是com.fasterxml.jackson.databind.jsonMappingException:无法从START_OBJECT令牌反序列化java.lang.String实例

  • 当我尝试对输入进行限制时,我在java中遇到了很多麻烦。在此示例中,我需要字符串代码仅接受和等符号。我如何检查以确保没有数字、字母或其他符号?谢谢

  • 问题内容: 我有以下问题。我需要获取UI属性: 返回字符串,并且有效。但是,如果我遍历密钥集,则永远不会得到密钥。有谁知道为什么会这样吗?我得到了三种不同的方式(,和),但这些工作的任何人。 编辑 :我也找到了JFileChooser类的属性列表,其中包含一些不会出现在键集中的属性。问题是:如何以编程方式获取所有这些属性? 编辑 :代码示例: 此代码返回打印这些属性。键不出现在输出中。 问题答案: