0. 개요
다중 스레드 환경에서는 싱글톤(Singleton) 객체 필드에 경쟁 조건(Race Condition)이 발생할 수 있다.
따라서 다중 스레드 환경인 JAVA의 서블릿(Servlet) 등에서는 정보를 저장하는 멤버변수가 포함되지 않도록 하여,
서로 다른 세션에서 데이터를 공유하지 않도록 한다.
1. 보안 대책
- 싱글톤 패턴을 사용하는 경우, 변수 범위에 주의를 기울인다.
: 특히 JAVA개발 경우 HttpServlet클래스의 하위클래스에서 멤버 필드를 선언하지 않도록 하고,
필요한 경우 지역 변수를 선언하여 사용한다.
2. 진단 방법
- HttpSerlvet / JSP / Controller 에서 멤버변수를 사용하는지 확인
3. 코드 예시
# 1 - 잘못된 세션에 의한 데이터 정보 노출 - 안전하지 않은 코드 예시(JAVA)
JSP 선언부(<%! 소스코드 %>)에 선언한 변수는 해당 JSP에 접근하는 모든 사용자에게 공유된다.
먼저 호출한 사용자가 값을 설정하고 사용하기 전에 다른 사용자의 호출이 발생하게 되면,
뒤에 호출 한 사용자가 설정한 값이 모든 사용자에게 적용되게 된다.
JSP의 서블릿(<% 소스코드 %>)에 정의한 변수는 _jspService 메소드의 지역변수로 선언되므로 공유가 발생하지 않아 안전하다.
# 1 + 잘못된 세션에 의한 데이터 정보 노출 - 안전한 코드 예시(JAVA)
# 2 - 잘못된 세션에 의한 데이터 정보 노출 - 안전하지 않은 코드 예시(JAVA)
Controller에 멤버 변수를 사용하면 공유가 발생하여 동기화 오류가 발생할 수 있다.
Controller에 멤버 변수를 사용하지 않고 지역 변수로 사용하도록 하자.
# 2 + 잘못된 세션에 의한 데이터 정보 노출 - 안전한 코드 예시(JAVA)
* controller : 대규모의 서비스의 경우 처리해야할 서비스들이 많아지는데 이때 하나의 클래스에서 모두 처리하지 않고
역할 분담을 하도록 한다. 나눠받는 중간 제어자 역할을 하는 것이 controller !
4. 해당 취약점 CASE
- HttpSerlvet / JSP / Controller에서 상수가 아닌 멤버 변수를 사용하는 경우
#. 참고 블로그
https://prokyhsigma.tistory.com/78?category=848515
'about Security > SECURE CODING' 카테고리의 다른 글
[에러처리] 부적절한 예외 처리 (5등급) (0) | 2021.08.10 |
---|---|
[보안기능] 주석문 안에 포함된 시스템 주요 정보 (5등급) (0) | 2021.08.10 |
[에러처리] 오류 메세지를 통한 정보 노출 (5등급) (0) | 2021.08.10 |
[시간 및 상태] 종료되지 않는 반복문 또는 재귀 함수 (5등급) (0) | 2021.08.10 |
[코드오류] NULL Pointer 역참조 (5등급) (0) | 2021.08.10 |
댓글