为什么jsoup删除内联样式表?

Ras*_*eri 4 html java sanitize jsoup

我使用jsoup保护我的应用程序免受XSS攻击.我得到所有的输入参数,并在那上做Jsoup.clean.但我有一个问题.

它删除所有内联样式表!为什么?我在我的应用程序中有一部分用户可以编写文本并将其作为公告发布.他/她通过TinyMCE写他/她的文本,并在用户文本中添加一些html和样式表.在下面你可以看到tinymce创建的示例文本:

用户输入: Center Aligned Text
TinyMCE结果:<p style="text-align: center;">Center Aligned Text</p>
Jsoup.clean(text, Whitelist.relaxed())输出:<p>Center Aligned Text</p>

正如可以看到Jsoup删除风格

标签.我怎么能说它不删除简单的CSS?
谢谢.

Mar*_*szS 9

默认情况下,白名单类中删除的风格,但你可以很容易地修改此行为,并添加支持style用addAttributes("p", "style").

Whitelist.relaxed().addAttributes("p", "style");
Run Code Online (Sandbox Code Playgroud)

说明

这个属性设置为清理时忽略的style元素p.只会style从中p删除!


验证码

只需复制粘贴此代码并从中调用即可main.

public static void main(String[] args) {
    String text = "<p style=\"text-align: center;\">Center Aligned Text</p>";
    String clean = Jsoup.clean(text, Whitelist.relaxed()
            .addAttributes("p", "style"));
    System.out.println(clean);
}
Run Code Online (Sandbox Code Playgroud)

结果

<p style="text-align: center;">Center Aligned Text</p>
Run Code Online (Sandbox Code Playgroud)

依赖

org.jsoup:jsoup:1.7.3
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用:all选择器为所有标签允许某些属性。例如:addAttributes(“:all”,“ class”,“ style”) (2认同)