当前位置: 首页 > 知识库问答 >
问题:

如何制作Jsoup白名单以接受某些属性内容

微生俊材
2023-03-14

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

是否有办法修改白名单以同时接受那些img?

编辑:

如果我使用白名单。放松()。添加协议(“img”、“src”、“数据”)则不会删除这些img标记。但它接受“data:”之后的任何内容,如果src内容以“data:;base64”开头,我只想保留它们。jsoup有可能吗?


共有1个答案

臧弘和
2023-03-14

您可以扩展白名单并覆盖isSafeAttribute以执行自定义检查。因为没有办法扩展白名单。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);
    }
}

由于您没有提供您正在解析的代码或您正在清理的超文本标记语言,我还没有测试它。

 类似资料:
  • 问题内容: 我正在将Jsoup与轻松的白名单一起使用。看起来很完美,但我想保留嵌入的图像标签,例如。 有没有办法修改白名单以接受这些img? 编辑 : 如果使用,则不会删除那些img标签。但是它接受“ data:”之后的任何内容,如果src内容以“ data:; base64”开头,我只想保留它们。jsoup是否可能? 问题答案: 您可以扩展白名单并覆盖isSafeAttribute以执行自定义检

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

  • 我正在建立一个图书馆数据库。我想编写一个查询,返回每个类别的前5本书,这意味着它必须返回每个类别借阅次数最多的5本书以及借阅次数。 查询涉及以下表: Book(ISBN, title, pubYork, numpage, pubName) borrows(memberID, ISBN, Copnr,date_of_borrowing,date_of_return) belongs_to(ISBN,

  • 很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。 调用方信息通过 ContextUtil.enter(resourceName, origin)

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

  • 问题内容: 这是我的代码: 如何查询以某些字符开头的服务器?例如,我如何为仅以“ AA”开头的服务器服务? 我正在使用Oracle SQL btw。 问题答案: 你可以这样做