token, XSS, CSRF

김루루룽·2022년 4월 20일
0

React, Next.js

목록 보기
21/42

token

토큰을 사용하는 이유

우선, 가장 큰 이유는 HTTP의 특성때문입니다. HTTP는 연결 지향 프로토콜인 TCP 기반임에도 불구하고, 대표적인 비연결 지향 프로토콜입니다. 따라서 한 번의 요청-응답 사이클이 완료되면 연결을 종료하기 때문에, 동일한 클라이언트가 요청을 아무리 많이 하더라도 프로토콜은 모두 처음보는 것 마냥 인지합니다.
이를 stateless 하다고 표현하기도 합니다.

stateful해지기 위해서, 즉, 상태를 유지하기 위해 많은 시도들이 있었습니다. 예를 들면, 우리가 잘 아는 세션이나 쿠키가 있습니다. 이는 대표적인 서버 기반 인증 시스템입니다. 이 시스템은 인증에 필요한 특정 유저 정보를 서버 혹은 데이터베이스에 저장할 수밖에 없습니다. 따라서, 서버나 데이터베이스의 부담이 증가하겠죠?

또한, CORS (Cross-Origin Resource Sharing)의 문제도 존재합니다. 웹 어플리케이션에서 세션을 관리 할 때 자주 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어있습니다. 따라서 쿠키를 여러 도메인에서 관리하는것은 좀 번거롭습니다.

그러나 토큰 기반 인증 시스템stateless 합니다. 무상태. 즉 상태유지를 하지 않는다는 것이죠. 이 시스템에서는 더 이상 유저의 인증 정보를 서버나 세션에 담아두지 않습니다. 서버의 부담이 감소할뿐만 아니라 보안성도 높고, 여러 플랫폼 및 도메인에서 적용가능하다는 장점이 있습니다! 또한, 대표적인 토큰 기반 인증 시스템인 JWT는 웹 표준으로서, 많이 이용되고 있습니다.
출처

자바스크립트 객체 표기법
객체를 하나 만들어 놓고 name과 만료일만 넣어두고 암호화 시킨다.
알 수 없는 문자열 형태로 바뀐다.
그 내용을 토큰 아이디로 사용하자! 암호화했던 내용을 복구하면 그걸 사용하면 된다.
ex) 나의 비밀번호가 1234면 암호화 시킨다. abcdff를 복호화 시킨다.

정리!

JWT (Json web Token)



accessToken 유효기간은 1시간.
토큰을 훔쳐서 사용하면 백엔드는 훔친 것인지 알 수 없다.

refreshToken : 암호화된 토큰을 자동으로 갱신해주는 토큰

jwt토큰은 누구든지 안의 내용을 열어 볼 수 있다.
중요한 정보를 넣으면 안된다!!!!
그렇지만 조작은 불가능하다.

서명에서 처음에 만들어졌을 때 서명된 내용과 판별한다






XSS

Cross-site-script(xss)


태그가 그대로 읽히기 때문에 스크립트 처리를 해줘야한다.
(리액트퀼이 알아서 해준다) <> 부분을 아스키코드로 처리해준다

백엔드에서 그대로 태그를 집어넣는다면 ?

페이지에서 로그인 토큰을 털려버렸다....

dompurify

이를 방지해주는 라이브러리

yarn add dompurify
yarn add @types/dompurify --dev

프리렌더링때문에 생기는 에러 -_-

브라우저일때 해달라고 요청해주자






CSRF

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

CSRF를 통해 해커는 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능합니다. 예를들어, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해 집니다.

출처: https://itstory.tk/entry/CSRF-공격이란-그리고-CSRF-방어-방법 [덕's IT Story]

profile
1day 1push..plz

0개의 댓글