naver / lucy-xss-filter

Other
328 stars 86 forks source link

logo

Lucy-XSS : XssFilter, XssPreventer

Lucy-XSS is an open source library of two defense modules to protect Web applications from XSS attacks. It supports the white-list rule based security policy. The current default rule is Naver's standard. You can change the default rule if you want.

XssFilter

Lucy-XSS Filter structure.jpg

XssPreventer

< → &lt; 
> → &gt; 
" → &quot; 
' → &#39;

https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#escapeHtml4%28java.lang.String%29

XssFilter VS XssPreventer

Release Information

The latest stable release of lucy-xss is 1.6.3. You can pull it from the central Maven repositories.

<dependency>
    <groupId>com.navercorp.lucy</groupId>
    <artifactId>lucy-xss</artifactId>
    <version>1.6.3</version>
</dependency>

Usage examples

@Test
public void testXssPreventer() {
    String dirty = "\"><script>alert('xss');</script>";
    String clean = XssPreventer.escape(dirty);

    assertEquals(clean, "&quot;&gt;&lt;script&gt;alert(&#39;xss&#39;);&lt;/script&gt;");
    assertEquals(dirty, XssPreventer.unescape(clean));
}
@Test
public void testSuperSetFix() {
    XssSaxFilter filter = XssSaxFilter.getInstance("lucy-xss-superset-sax.xml");
    String expected = "<TABLE class=\"Naver_Layout_Main\" style=\"TABLE-LAYOUT: fixed\" cellSpacing=\"0\" cellPadding=\"0\" width=\"743\">" + "</TABLE>" + "<SPAN style=\"COLOR: #66cc99\"></SPAN>";
    String actual = filter.doFilter(clean);
    assertEquals(expected, actual);
}
@Test
public void pairQuoteCheckOtherCase() {
    XssFilter filter = XssFilter.getInstance("lucy-xss-superset.xml");
    String dirty = "<img src=\"<img src=1\\ onerror=alert(1234)>\" onerror=\"alert('XSS')\">";
    String expected = "<img src=\"\"><!-- Not Allowed Attribute Filtered ( onerror=alert(1234)) --><img src=1\\>\" onerror=\"alert('XSS')\"&gt;";
    String actual = filter.doFilter(dirty);
    assertEquals(expected, actual);

    dirty = "<img src='<img src=1\\ onerror=alert(1234)>\" onerror=\"alert('XSS')\">";
    expected = "<img src=''><!-- Not Allowed Attribute Filtered ( onerror=alert(1234)) --><img src=1\\>\" onerror=\"alert('XSS')\"&gt;";
    actual = filter.doFilter(dirty);
    assertEquals(expected, actual);
}

For more information, please see User guide

Contributing to Lucy-XSS

Want to hack on Lucy-XSS? Awesome! There are instructions to get you started here. They are probably not perfect, please let us know if anything feels wrong or incomplete. (Please wait. We are preparing for contribution guide.)

Other Lucy-XSS Related Projects

Licensing

Lucy is licensed under the Apache License, Version 2.0. See LICENSE for full license text.

Maintainer

leeplay Seongmin Woo Jaehee Ahn