我正在尝试使用 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/