ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 크로스 사이트 요청 위조 (CSRF. Cross Site Request Forgery)
    보안(Security)/XSS 2018. 9. 10. 09:57

    "특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격이다." 
    네이버 백과사전 정의이다. 
    대표적인 예가 무엇이 있을까? 쇼핑몰 사이트이다.

    1) 쇼핑몰 사이트에 관리자가 읽을만한 글을 게시한다.  홈페이지에 게시된 계좌번호를 해커의 것으로 변경하는 URL 요청을 보이지 않는 태그(img)로 삽입한다.
    2) 관리자가 글을 읽을 때 URL 요청이 수행되어 계좌번호가 변경하는 요청을 수행한다.
    3) 사이트로 입금되는 금액이 해커의 수중에 넘어간다.

    하기 카페 글을 읽고 이해에 도움이 되었으니 참고할 것.

    https://cafe.naver.com/ehdl24eek/29669



    이를 응용한다면 게시글을 자동으로 계속 작성하는 요청을 Detail 페이지에 삽입할 수 있고, 서버 DDoS 공격에 나도 모르게 일조하는 상황까지 발생할 수 있다.

    대응 기법
    - 실제 사용자의 브라우저에서 입력된 값을 이용해 요청이 발생되었는지를 서버에서 확인할 수 있도록 해야 한다. 
    - 사용자 세션에 고유한 난수 생성 후 토큰 값을 할당해 비교 확인한다.

    사용 메소드 및 컨셉

    - UUID : universally unique identifier의 약어로 범용 고유 식별자이다. 
    - UUID.randomUUID() : 난수 발생시키는 메소드. 현재 시각을 기준으로 난수를 발생시켜 고유한 하나의 숫자를 만들어낸다. util 패키지 통해 지원한다.


    로그인 컨트롤러. login 메소드에 LoginVO 커맨드 객체를 매개변수로 보내 사용자 인증여부 확인한다. 인증된 사용자면 난수를 발생시켜 세션에 할당한다.
    * Session,CSRF_TOKEN은 상수 인터페이스로 선언해놓은 String 객체

    게시글 작성 페이지. 로그인시 세션에 할당하는 토큰 값을 넣어둔다

    컨트롤러에서 jsp의 토큰 값과 세션에서 할당한 토큰 값을 비교해 다르면 실행하지 않도록 처리해준다.


Designed by Tistory.