2016-11-23 1 views
0

Я пытаюсь очистить текстовую строку, содержащую возможно вредоносный контент (XSS), используя Java lib Jsoup. Я должен разрешить ссылки < a href = «http://www.link.com» > ссылки </a > ссылки, но я не хочу разрешать ссылки на JavaScript по причинам XSS.org.jsoup.Jsoup не обрабатывает ссылки на javascript?

Ниже приведен тестовый пример, так как протокол javascript по-прежнему разрешен. Любые идеи о том, как это решить, используя встроенные функции 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.> 

ответ

1

Это вызвано вы добавляете 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)); 
0

Обнаружил себя ... Это сделает указанные протоколы действительными но протокол javascript следует удалить

Whitelist whitelist = Whitelist.none(); 

    whitelist 
     .addTags("a") 
     .addAttributes("a", "href") 
     .addProtocols("a", "href", "http", "https", "mailto"); 

    String safeText = Jsoup.clean(untrustedText, whitelist); 
Смежные вопросы