Skip to content

Commit

Permalink
Merge pull request #329 from AnzhiZhang/main
Browse files Browse the repository at this point in the history
Add data to DefaultUrlSanitizer protocols
  • Loading branch information
robinst authored Jul 7, 2024
2 parents 3166508 + 804e83c commit 7d12b6f
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

/**
*
* Allows http, https and mailto protocols for url.
* Allows http, https, mailto, and data protocols for url.
* Also allows protocol relative urls, and relative urls.
* Implementation based on https://github.com/OWASP/java-html-sanitizer/blob/f07e44b034a45d94d6fd010279073c38b6933072/src/main/java/org/owasp/html/FilterUrlByProtocolAttributePolicy.java
*/
public class DefaultUrlSanitizer implements UrlSanitizer {
private Set<String> protocols;

public DefaultUrlSanitizer() {
this(List.of("http", "https", "mailto"));
this(List.of("http", "https", "mailto", "data"));
}

public DefaultUrlSanitizer(Collection<String> protocols) {
Expand Down
34 changes: 34 additions & 0 deletions commonmark/src/test/java/org/commonmark/test/HtmlRendererTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,47 @@ public void sanitizedUrlsShouldSetRelNoFollow() {
assertEquals("<p><a rel=\"nofollow\" href=\"https://google.com\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));
}

@Test
public void sanitizedUrlsShouldAllowSafeProtocols() {
Paragraph paragraph = new Paragraph();
Link link = new Link();
link.setDestination("http://google.com");
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"http://google.com\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));

paragraph = new Paragraph();
link = new Link();
link.setDestination("https://google.com");
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"https://google.com\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));

paragraph = new Paragraph();
link = new Link();
link.setDestination("mailto:[email protected]");
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"mailto:[email protected]\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));

String image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAAQSURBVBhXY/iPBVBf8P9/AG8TY51nJdgkAAAAAElFTkSuQmCC";
paragraph = new Paragraph();
link = new Link();
link.setDestination(image);
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"" + image + "\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));
}

@Test
public void sanitizedUrlsShouldFilterDangerousProtocols() {
Paragraph paragraph = new Paragraph();
Link link = new Link();
link.setDestination("javascript:alert(5);");
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));

paragraph = new Paragraph();
link = new Link();
link.setDestination("ftp://google.com");
paragraph.appendChild(link);
assertEquals("<p><a rel=\"nofollow\" href=\"\"></a></p>\n", sanitizeUrlsRenderer().render(paragraph));
}

@Test
Expand Down

0 comments on commit 7d12b6f

Please sign in to comment.