Docker

2020. 11. 16. 16:02

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형


System.currentTimeMIllis()를 이용하여 프로그램 수행 시간을 확인하는 코드이다.


시간이 얼마나 걸릴지 확인하고자 하는 코드의 시작지점과 끝 지점에 System.currentTimeMIllis()를 삽입하여 시간을 체크하고, 그 차이를 이용하여 걸린 시간을 확인할 수 있다.


※ System.currentTimeMIllis() 이란?

 : 1970년 1월 1일부터 현재까지의 시간을 천 분의 일초로 계산한 결과를 long형의 정수로 반환하는 메서드


반응형
블로그 이미지

rootable

,
반응형

만약 XSS(Cross Site Scripting) 취약점이 발견되어 대응을 해야할 때 각 파라미터별로 원하는 문자를 모두 필터링 걸어준다는 것은 비효율적이라는 생각이 들었다.


그래서 XSS 방어를 위한 관련 라이브러리가 존재하지 않을까하여 찾아본 것을 공유한다.


1. StringEscapeUtils

 StringEscapeUtils 클래스는 Apache에서 공식으로 제공해주는 class이다. 해당 클래스에 대한 설명은 다음과 같이 나와있다.

Escape and unescape Strings for Java, Java Script, HTML and XML

 

설명에서 보는 것처럼 해당 클래스는 HTML 뿐만 아니라 Java, Java Script, XML에 대한 escape와 unescape도 제공을 해주고 있다.

하지만 이번 포스팅의 주제가 XSS인 만큼 HTML에 대한 기능에 대해서만 살펴보도록 하겠다.


 ◎ escapeHtml3(String input) : HTML entites를 사용하여 String 안의 문자들을 escape한다. HTML version 3.0을 escape하는 translator object이다.


 ◎ escapeHtml4(String input) : HTML entites를 사용하여 String 안의 문자들을 escape한다. HTML version 4.0을 escape하는 translator object이다.


 ◎ unescapeHtml3(String input) : entity escapes를 포함하는 문자열을 실제 유니코드 문자들로 entity escapes를 포함하는 문자열을 실제 유니코드 문자가 포함된 문자열로 unescape한다. HTML version 3.0을 unescape하는 translator object이다.


 ◎ unescapeHtml4(String input) : entity escapes를 포함하는 문자열을 실제 유니코드 문자들로 entity escapes를 포함하는 문자열을 실제 유니코드 문자가 포함된 문자열로 unescape한다. HTML version 4.0을 unescape하는 translator object이다.



간단하게 위의 class를 이용한 코드는 다음과 같다. 


import org.apache.common.lang3.StringEscapeUtils;

...

String text = request.getParameter("text");

text = StringEscapeUtils.escapeHtml4(text);

...


참고 : http://commons.apache.org/proper/commons-lang//apidocs/org/apache/commons/lang3/StringEscapeUtils.html





2. Lucy-XSS

Lucy-XSS는 naver에서 open source 형태로 제공해주는 XSS 관련 라이브러리이다.

해당 라이브러리에 대한 설명을 보면 이 library 또한 위에서 말한 StringEscapeUtils를 사용했음을 알 수 있다.


Lucy-XSS에는 XssFilter, XssPreventer 두가지가 제공되는데 각각은 다음과 같을 때 사용하라고 명시되어 있다.


XssPreventer : HTML 이외의 간단한 text 파라미터일 때에는 XssPreventer를 사용

XssFilter : 메일, 게시판 등 입력값으로 HTML 태그를 받을 경우에는 XssFilter를 사용


아래는 각각에 대한 간단한 코드이다.


XssPreventer

@Test

public void testXssPreventer() {

String dirty = "\"><script>alert('xss');</script>";

String clean = XssPreventer.escape(dirty);


assertEquals(clean, "&quot;&gt;&lt;script&gt;alert(&#39xss&#39);&lt;/script&gt;");

assertEquals(dirty, XssPreventer.unescape(clean));

}


◎ XssFilter

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

}


참고 : https://github.com/naver/lucy-xss-filter

반응형

'Develope > JSP' 카테고리의 다른 글

[JSP 보안] Secure Coding  (0) 2018.05.01
[JSP] kali linux에 JSP 개발환경 세팅  (0) 2018.03.31
블로그 이미지

rootable

,
반응형

1. 1부터 10 사이의 임의의 수

Math 클래스의 random() 을 사용하여 1과 10 사이의 임의의 수를 구하는 코드는 다음과 같다.


1
int score = (int)(Math.random() * 10)+1;
cs


이제 위의 코드를 조금 더 풀어서 설명해보도록 하겠다.

우선 Math 클래스의 random() 함수는 0.0과 1.0 사이의 범위에 속하는 하나의 double 값을 반환한다.


0.0 <= Math.random() < 1.0


여기에 10을 각각 곱하면 다음과 같다.


0.0 * 10 <= Math.random() * 10 < 1.0 * 10

0.0 <= Math.random() * 10 < 10.0


이것을 int형으로 변환시켜주면 다음과 같다.


0 <= (int)(Math.random() * 10) < 10


여기에 1을 더해주면 다음과 같다.

1 이상 11 미만이므로 정수로 1과 10 사이의 정수가 출력된다.


0+1 <= (int)(Math.random() * 10)+1 < 10+1

1 <= (int)(Math.random() * 10)+1 < 11




2. 임의의 주사위 수

위의 코드를 이용하여 임의의 주사위 숫자를 구하는 것도 다음과 같이 할 수 있다.

주사위는 1부터 6까지의 수이므로 다음과 같은 코드로 구현이 가능하다.

1
int player = (int)(Math.random() * 6)+1;
cs



3. 임의의 문자

임의의 문자가 ascii 코드 상에서 연속적으로 존재한다는 특징을 이용한 것이다.

만약 영문의 대문자 중 한 문자를 얻고자 한다면 다음과 같은 코드로 구현할 수 있다.

1
char Upper = (char)(Math.random()*26+65);
cs


간단하게 설명하자면 영문자가 총 26개이므로 26을 곱해준 것이고 대문자 ascii 코드가 65부터 시작하기 때문에 65를 더해준다.


여기서 위와 다른 점은 char형으로 형변환하기 전에 +65를 해주었다는 점이다.

만약 위와 같이 (char)(Math.random()*26)+65; 를 하였다면 +65를 할 때 int형으로 변환되므로 에러가 발생된다.



반응형
블로그 이미지

rootable

,