JWT (Json Web Token)
What is JWT ?
aaaaaa . bbbbbb . cccccc
헤더(header) 내용(payload) 서명(signature)
- Header
- typ : 토큰 타입 "JWT"
- alg : 해싱알고리즘 "HS256" 혹은 "RSA"
- Payload
- registered claim
- iss, sub, exp, jti 등등
- public claim
- private claim
- (claim : 정보를 담는 조각. 단위)
- registered claim
- Signature
- hash(encode(Header) + "." +encode(Payload) , secret)
클라이언트에서 jwt를 어떻게 관리할 것 인지 ?
쿠키 or 로컬스토리지
쿠키와 로컬스토리지의 차이는?
LocalStorage | Cookie | |
---|---|---|
장점 | CSRF 공격에 안전 | XSS 공격으로부터 LS보다 안전 But 완전히 안전 X |
단점 | XSS 공격에 취약 | CSRF 공격에 취약 |
What is XSS (Cross Site Scripting) ?
공격자가 의도하는 악의적인 js코드를 피해자 웹 브라우저에서 실행시키는것
What is CSRF (Cross Site Request Forgery) ?
정상적인 request를 가로채 피해자인 척하고 백엔드 서버에 변조된 request를 보내 악의적인 동작을 수행하는 공격 (피해자 정보 수정, 정보 열람)
ex) facebook의 내가 쓰지 않은 광고성 글
공격 과정
- 공격자는 피해자가 img를 열람하도록 하거나 link를 클릭하도록 유도
- 이 action은 피해자 의도와는 관계없이 HTTP request를 보낸다.
- 피해자가 로그인 되어있는 상태라면, 이 request는 정상적으로 서버에 동작 수행
그러면 뭘 써야하나 ?
난 쿠키!
일단 refresh token
을 사용하자
refresh token
을secure
httpOnly
쿠키로 설정하고- URL 새로 고침 될 때마다
refresh token
을 request에 담아 새로운acess token
을 발급받는다.
refresh token
을 사용함으로써 CSRF 공격에 대비할 수 있고,httpOnly
쿠키를 사용하여 XSS 공격을 (어느정도)막을 수 있다.
하지만.. refresh token
은 access token
과 다르게 토큰 자체로 검증이 가능한 것이 아니라 DB를 통해야하므로 서버의 과부하 예상..
보안성과 성능/서버안정성의 줄다리기
What is HTTPOnly Cookies ?
HttpOnly 접미사 추가하면 활성화가 되며, 브라우저에서 해당 쿠키로 접근 못한다. (XSS로부터 방어)
// 쿠키 생성시 속성 넣어주면 된다.
Response.Cookies.Add(new HttpCookie("쿠키명")
{
Value = "쿠키 값",
HttpOnly = true
});
기본값을 수정하고 싶을 때
// web.config 에서 설정
<httpCookies httpOnlyCookies="true" />
Q. What is Secure Cookies ?
javascrip가 아닌 네트워크를 직접 감청하여 쿠키를 가로챌 수도 있다.
이러한 통신상의 정보유출을 막기 위해, HTTPS 프로토콜을 사용하여 데이터를 암호화하는 방법이 주로 사용됨.
하지만 개발자의 실수로 https가아닌 http로 데이터가 전송되는 경우가 발생할 수 있다.
이러한 사고를 방지하기 위해 secure
접미사를 사용한다.
Set-Cookie: 쿠키명=쿠키값; path=/; secure
이렇게하면 HTTPS가 아닌 통신에서는 쿠키를 전송하지 않는다
ASP.NET에서는
// HttpCookie Class
Response.Cookies.Add(new HttpCookie("쿠키명")
{
Value = "쿠키 값",
Secure = true
});
기본값을 수정하고 싶을 때
// web.config 에서 설정
<httpCookies requireSSL="true" />
'개발일지 > Javascript' 카테고리의 다른 글
[Javascript] String to array (0) | 2021.09.24 |
---|---|
[Javascript] array sort 다중 조건 (0) | 2021.09.24 |
[JavaScript] 문자열 (0) | 2021.07.27 |
Java와 JavaScript의 차이점 (0) | 2021.05.16 |
[axios] 이중으로 비동기 요청시 proxy 설정 error (0) | 2020.10.10 |