java - org.jsoup.Jsoup 不处理 javascript 链接?

标签 java jsoup xss

我正在尝试使用 Java lib Jsoup 清理包含可能恶意内容 (XSS) 的文本字符串。我必须允许 link 链接,但由于 XSS 原因,我不想允许 javascript 链接。

下面的测试用例将会失败,因为 javascript 协议(protocol)仍然被允许。关于如何使用 Jsoup 内置函数解决这个问题有什么想法吗?

@Test
public void test() {

    Whitelist tWhitelist = Whitelist.none();

    tWhitelist.addAttributes("a", "href");
    tWhitelist.removeProtocols("a", "href", "javascript");      

    String tUnsafe = "<a href=\"javascript:alert(1)\">Link</a> is a link.";
    assertEquals("Link is a link.", Jsoup.clean(tUnsafe, tWhitelist));
}

    org.junit.ComparisonFailure: expected:<[Link] is a link.> but was:<[<a href="javascript:alert(1)">Link</a>] is a link.>

最佳答案

这是因为您在白名单中添加了a 标签,您可以直接使用none白名单,例如:

Whitelist tWhitelist = Whitelist.none();

String tUnsafe = "<a href=\"javascript:alert(1)\">Link</a> is a link.";
assertEquals("Link is a link.", Jsoup.clean(tUnsafe, tWhitelist));

或者您可以使用basic白名单来保留其他href,例如:

    Whitelist tWhitelist = Whitelist.basic();

    tWhitelist.removeProtocols("a", "href", "javascript");
    String tUnsafe = "<a href=\"javascript:alert(1)\">Link</a> is a link.<a href=\"http://www.google.com\" rel=\"nofollow\">google</a>";
    assertEquals("<a rel=\"nofollow\">Link is a link.</a><a href=\"http://www.google.com\" rel=\"nofollow\">google</a>", Jsoup.clean(tUnsafe, tWhitelist));

关于java - org.jsoup.Jsoup 不处理 javascript 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40760587/

相关文章:

java - 在纯 HTML 文本周围包装标签

security - 在 Web 开发期间,我将花费多少时间在用户输入验证上?

javascript - 跨子域的 Wymeditor。 (跨站权限问题。)

java - 两个类之间的compareTo()方法设置

java - 如何通过 Maven 运行 stilliard/pure-ftpd

java - 如何在 Apache Tomcat 中初始化 Web 应用程序?

jquery - jQuery 的 $ 是否可以免受 XSS 攻击?

java - 如何为android提供的不同日期和时间格式的视频添加时间戳?

java - 使用 Jsoup 从 html 代码中提取数据

android - Jsoup 和安卓