token, XSS, CSRF

wony·2022년 4월 23일
0

XSS = Cross-Site-Script(Scripting)

크로스 사이트 스크립팅(Cross Site Scripting, XSS)은 공격자가 상대방의 브라우저에 스크립트가 실행되도록 해
사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말합니다.
XSS 공격은 스크립트 언어와 취약한 코드를 공격 대상으로 합니다.

로그인을 하면 이메일 비번을 입력하고 로그인버튼을 누르면 백엔드로 요청이 들어가고 토큰이 생성되고 백엔드에서 토큰을 보내준다

만약 로그인 함수에서

if(email === a@a.com && pw === 1234){ // accessToken 프론트에 보내줘 } 

라고 작성되었다면 이메일과 비번 둘다 true여야 실행되지만
만약에 비밀번호에

qqq || 1===1 

이라고 적는다면 둘중 하나만 true여도 true가 되기 때문에 1===1 이 true이므로 로그인이 성사된다

Untitled image


CSRF =Cross-site request forgery

사이트 간 요청 위조 (Cross-site request forgery)란
웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말한다.
유명 경매 사이트인 옥션에서 발생한 개인정보 유출 사건에서 사용된 공격 방식 중 하나다.

공격의 과정은

  1. 이용자는 웹사이트에 로그인하여 정상적인 쿠키를 발급받는다
  2. 공격자는 링트를 이메일이나 게시판등의 경로를 통해 이용자에게 전달한다
  3. 공격용 HTML페이지는 다음과 같은 이미지태그를 가진다
    해당 링크는 클릭시 정상적인 경우 출발지와 도착지를 등록하기위한 링크이다. 위의 경우 도착지를 변조하였다.
<img src= "https://travel.service.com/travel_update?.src=Korea&.dst=Hell">
  1. 이용자가 공격용 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 공격용 URL을 연다.

  2. 이용자의 승인이나 인지 없이 출발지와 도착지가 등록됨으로써 공격이 완료된다. 해당 서비스 페이지는 등록 과정에 대해 단순히 쿠키를 통한 본인확인 밖에 하지 않으므로 공격자가 정상적인 이용자의 수정이 가능하게 된다.


token

JSON 웹 토큰(JSON Web Token, JWT)은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로,
토큰은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명된다.
이를테면 서버는 "관리자로 로그인됨"이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있다.
그러면 클라이언트는 해당 토큰을 사용하여 관리자로 로그인됨을 증명한다.
이 토큰들은 한쪽 당사자의 비공개 키(일반적으로 서버의 비공개 키)에 의해 서명이 가능하며 이로써 해당 당사자는 최종적으로 토큰이 적법한지를 확인할 수 있다.
토큰은 크기가 작고 URL 안전으로 설계되어 있으며 특히 웹 브라우저 통합 인증(SSO) 컨텍스트에 유용하다.
JWT 클레임은 아이덴티티 제공자와 서비스 제공자 간의 인가된 사용자의 아이덴티티를 전달하기 위해 보통 사용할 수 있다.

원래 데이터는 테이블 안에 저장이 되는데
객체를 만들어 놓고
{
id:adf
name: 철수
exp: ~2022
}
이런식으로 만든 뒤 객체를 암호화시킨다

암호화한 토큰아이디를 JSON WEB TOKEN
JWT 라고 부른다
(자바스크립트 객체 표기법)

암호화란?
암호화된 아이디를 원래의 아이디로 변환 시켜주는것

복호화란?
암호화된 아이디를 원래의 아이디로 변환 시켜주는것

브라우저에서 이메일 비밀번호를 백으로 보내고
데이터베이스에서 저장된 값이 맞는지 확인하고 백에서 정보들을 객체로 만들고
그 객체를 암호화 시켜 암호화된 토큰 아이디를 만들고 브라우저에게 state로 암호화된 값을 보내준다
브라우저에서는 상품등록을 위해 셀러, 가격 , 암호화된 아이디를 createProduct 백엔드로 보낸뒤 아이디를 복호화하면 생성했던 객체나 나타나서 그 안에 있던 정보들이 나타난다

JWT 토큰 구성

JWT는 세 파트로 나누어지며, 각 파트는 점로 구분하여 xxxxx.yyyyy.zzzzz 이런식으로 표현됩니다.
순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)로 구성합니다.

암호화된 부분

복호화된 부분 객체를 만들고 이것을 암호화 한다




단점은 1시간마다 로그인이 풀림
해결책은 refresh Token


홈페이지에 토큰을 입력해보면 정보가 뜬다

중요한 점
JWT는 누구나 열어볼 수 있기 때문에
중요한 정보는 넣지 않는다
예를 들면 계좌번호나 주민번호등 민감한 문제는 넣지 않는다
누구나 볼 수는 있지만 조작은 불가능하다
처음 만들어 졌을 때 서명칸이 있기에 그 칸을 통해 조작이 이루어졌는지 확인한다

공부하기에 좋은 블로그
https://velog.io/@junghyeonsu/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8%EC%9D%84-%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95


출처 -
https://nordvpn.com/ko/blog/xss-attack/

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0

https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0

profile
무럭무럭 성장중🌿

0개의 댓글