티스토리 뷰
가. 원인
- 다중 스레드 환경에서 싱글톤 객체의 멤버변수를 사용하는 경우
나. 영향
- 다중 스레드 환경에서 싱글톤 객체 필드에 경쟁조건이 발생
- 싱글톤 객체의 멤버변수를 여러 스레드에 의해 공유되면서 다른 스레드에 정보를 노출
다. 보안대책
- 싱글톤 패턴을 사용 시 변수의 범위에 주의하여 사용
- Java HttpServlet / JSP / Controller 에서 멤버 필드 사용 금지
라. 안전하지 않은 코드
1. JSP에서 멤버변수 사용
// <%! 를 사용하면 상속받는 서블릿 객체의 멤버변수로 변하여 동기화 처리가 필요해진다 // <% 로 변경하여 로컬변수로 선언하여 사용해야 한다. <%! String userName = "test"; ... %>
|
2. Controller에서 멤버변수 사용
@Controller public class userController { // 컨트롤러에 선언된 멤버변수가 컨트롤러를 이용하는 스레드간에 공유됨 // 스레드 별로 값을 사용하기 위해 지역변수로 변경해야 함 private int rank = 1;
public checkMyRank( ) { String userID = session.getAttribute("LoginID").toString(); int score = getScore( userID ); rank = calcurateRank( userID, score ); ... } } |
마. 진단방법
<멤버변수 사용 확인>
1. HttpSerlvet / JSP / Controller에서 멤버변수를 사용하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. 서블릿(JSP 포함)에서 상수가 아닌 멤버 변수를 사용할 경우
<오탐 케이스>
1. JSP나 서블릿에서 내부 클래스 사용 시
2. Final을 이용하여 상수로 값을 사용할 경우
3. Spring 프레임워크 기반의 eGov 프레임워크는 IoC를 이용하여 인스턴스를 관리하고 있음
( @Resource(name = "fileMngService" )
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 캡슐화 03 - 시스템 데이터 정보 노출 (0) | 2019.10.07 |
---|---|
[구현보안] 캡슐화 02 - 제거되지 않고 남은 디버그 코드 (0) | 2019.10.07 |
[구현보안] 코드오류 04 - 초기화되지 않은 변수 사용 (0) | 2019.10.07 |
[구현보안] 코드오류 03 - 해제된 자원 사용 (0) | 2019.10.07 |
[구현보안] 코드오류 02 - 부적절한 자원 해제 (0) | 2019.10.07 |
- Total
- Today
- Yesterday