티스토리 뷰

반응형

 

 

 

가. 원인

  - 다중 스레드 환경에서 싱글톤 객체의 멤버변수를 사용하는 경우

 

 

나. 영향

  - 다중 스레드 환경에서 싱글톤 객체 필드에 경쟁조건이 발생

  - 싱글톤 객체의 멤버변수를 여러 스레드에 의해 공유되면서 다른 스레드에 정보를 노출

 

 

다. 보안대책

  - 싱글톤 패턴을 사용 시 변수의 범위에 주의하여 사용

  - 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" )

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday