본문 바로가기
Programming Language/Java

[Java/maven] Lucy-XSS 교차 사이트 스크립팅 (XSS) 보안 라이브러리

by 뒹굴거리는프로도 2024. 5. 2.
반응형

 


웹 개발 시 소프트웨어 보안 취약점을 고려하는 것은 필수이지요.

오늘 다루는 라이브러리는, 상당히 흔한 웹 취약점인 교차 사이트 스크립팅(XSS)을 방어해 주는 도구입니다.

교차 사이트 스크립팅(XSS)란 공격자가 웹 사이트에 악성코드를 주입하는 보안 공격인데요, 웹 프로그램이 충분히 유효성 검사를 하지 않거나 인코딩을 사용하지 않는 경우 이러한 피해를 입을 수 있습니다.

 

Lucy-XSS는 이러한 공격으로부터 웹 앱을 보호하기 위해 만든, 자바 기반 오픈 소스 라이브러리입니다. 화이트 리스트 설정 방식을 사용하고 있으며 Apache License를 가지고 있습니다.

GitHub - naver/lucy-xss-filter

 

GitHub - naver/lucy-xss-filter

Contribute to naver/lucy-xss-filter development by creating an account on GitHub.

github.com

 

Lucy-XSS는 두 가지 방어 모듈을 지원하는데요. 하나는 XssFilter이고 다른 하나는 XssPreventer입니다. 만약 HTML 태그를 입력폼으로 받을 경우 XssFilter를 사용하면 되고요, 단순한 텍스트를 입력폼으로 받을 경우 XssPreventer를 사용하면 됩니다.

Maven에 dependency를 추가할 경우 아래 태그를 사용하면 됩니다. 2024년 5월 기준 최신 버전은 1.6.3입니다.

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

 

XssFilter와 XssPreventer의 사용 예시는 루시 xss 깃허브에도 나와있지만 블로그 글에 옮겨봅니다.

XssPreventer

@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));
}

 

XssFilter : SAX

@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);
}

 

XssFilter : DOM

@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);
}

 

 

 


https://developer.mozilla.org/ko/docs/Web/Security/Types_of_attacks#cross-site_scripting_xss

 

공격 유형 - 웹 보안 | MDN

이 문서는 다양한 유형의 보안 공격과 이를 완화하는 기술을 다룹니다.

developer.mozilla.org

 

반응형