IT모아

JWT(2) 알아가기 본문

Etc

JWT(2) 알아가기

아롱사태남 2018.10.17 18:14

토큰은 안전한가?

토큰을 안전하게 사용하기위해서 다음과 같은 모범 사례를 따르도록 권장합니다.

  • JWT는 안전한 HttpOnly 쿠키에 저장해야 합니다. 이렇게 해야 Cross-Site Scripting(XSS) 공격을 방지할 수 있습니다.
  • 쿠키를 사용해서 JWT를 전송한다면, CSRF 방어가 무엇보다 중요합니다. 악의적인 다른 도메인에 의해서 사용자가 인식하지 못 하는 사이에 우리가 구축한 웹 서버로 요청이 발생할 수 있기 때문입니다. 토큰의 전송 방식으로 쿠키를 사용한다면 CSRF에 대한 대비책을 반드시 준비 해야 합니다.
  • 강력한 키key로 토큰을 서명해야 하며 키key는 인증 서비스에서만 접근해야 합니다. 토큰을 사용해서 사용자를 인증할 때마다 항상 보안 키로 서명되어 있는지 검사해야 합니다.
  • 민감한 데이터는 JWT로 저장하면 안됩니다. 토큰은 일반적으로 조작을 방지하기 위한 목적으로 서명되므로 권한claim 데이터는 쉽게 디코드decode해서 볼 수 있습니다. 민감한 정보를 토큰으로 저장하면 유출될 수 있습니다. 서명을 위한 보안 키는 토콘의 발행자issuer와 소비자consumer만 접근할 수 있어야 하며 절대 외부에서의 접근을 허용해서는 안됩니다.
  • 리플레이replay 공격에 대비하려면 nonce(jti claim)과 유효기간expiration time (exp claim), 생성시간creation time을 권한claims에 포함시켜야 합니다. 여기에 대한 자세한 사항은 JWT 규격에 정의되어 있습니다.







httpOnly란?

브라우저에서 쿠키 값을 획득 못하도록 막는것

httpOnly사용법?

서버에서 쿠키값 뒤에 ; httpOnly 를 주면 된다

ex) Cookie cookie = new Cookie("abc; httpOnly");

=> 이렇게 하면 document.cookie 로 접근이 불가능


해결책 : XST(Cross Site Tracing) 의 핵임인 XMLHttpRequest


해결책이 있는 관계로 TRACE옵션을 끄는게 좋다




TRACE method 란?


웹 서버로 보낸 HTTP Request를 Response Body에 포함하여

클라이언트로 전송시켜주는 method



TRACE off 하는 방법은?

아파치 웹서버 설정 파일에서 "TraceEnable off" 를 추가 후 웹서버를 재시작.




stateless 및 stateful 란?

- stateless : 무상태 프로토콜은 서버가 복수의 요청 시간대에 각각의 통신 파트너에 대한
세션 정보나 상태 보관을 요구하지 않는다

- stateful : 서버의 내부 상태 유지를 요구하는 프로토콜 (상태 프로토콜) 이라 한다




CSRF 란?


CSRF(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자가
자신의 의지와는 무관하게 공격자가 의도한 행위(CRUD)를 특정 웹사이트에 요청하게 만드는 공격입니다.

CSRF를 통해 해커는 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능합니다.

예를들어, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해 집니다


[이미지 출처 : http://www.bluekaizen.org]


조금 더 설명하자면, CSRF는 해커가 사용자의 컴퓨터를 감염시키거나 페이스북 서버를 해킹을 해서 이뤄지는 공격은 아닙니다. 그래서 CSRF 공격이 이뤄지려면

다음 조건이 만족되어야 합니다.


● 위조 요청을 전송하는 서비스(페이스북)에 희생자가 로그인 상태

● 희생자가 해커가 만든 피싱 사이트에 접속


언뜻 보면

0 Comments
댓글쓰기 폼