[네트워크] 쿠키, 세션, 토큰, REST, 프록시

李🌸·2023년 10월 12일
0

네트워크

목록 보기
6/7

쿠키와 세션

쿠키란?

  • 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이다.
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.

세션이란?

  • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.

쿠키 vs 세션
가장 큰 차이점은 사용자의 정보가 저장되는 위치이다.
쿠키: 서버의 자원을 전혀 사용X
세션: 서버의 자원을 사용

토큰에 대해 설명해주세요.

클라이언트에서 인증 정보를 보관하는 방법이다.
세션 기반 인증은 클라이언트에서 유저 정보를 요청 할 때마다 해당 정보를 줘도 되는지에 대해 세션 값 일치여부를 확인했었다. 매 요청마다 DB를 살펴보는 것이 불편하고, 부담이 되었기 때문에 토큰 기반 인증 개념이 생겨났다.

토큰 인증 과정
1. 토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 '토큰'을 부여한다.
2. 이 토큰은 유일하며 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어서 보낸다.
3. 서버에서는 클라이언트로부터 받은 토큰을 서버에서 제공한 토큰과의 일치 여부를 체크하여 인증 과정을 처리하게 된다.

업로드중..

SOP와 CORS란?

SOP (Same-origin policy)

  • 동일한 출처에서 온 요청만 처리하는 것이다.
  • 자바스크립트 엔진 표준 스펙의 보안 규칙으로 하나의 출처(Origin)에서 로드된 자원(문서나 스크립트)이 호스트나 프로토콜, 포트번호가 일치하지 않는 자원과 상호작용 하지 못하도록 요청 발생을 제한하고, 동일 출처에서만 접근이 가능한 정책이다.

CORS(Cross-Origin Resource Sharing)

  • 추가 HTTP 헤더를 사용하여, 한 origin에서 실행 중인 웹 애플리케이션이 다른 origin의 리소스에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
  • 웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있으며, 다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 한다.
  • CORS는 웹페이지상에서 자바스크립트를 이용하여 XHR(XMLHttpRequest)을 다른 도메인으로 발생 시킬 수 있도록 해주는 기능을 가지고 있고 XHR 기반 cross-origin HTTP 요청을 이용하여 자원을 공유해야 하는 브라우저와 서버 간의 안전한 교차 출처 요청 및 데이터 전송을 지원한다.

REST API란?

Rest란?

  • 웹 서버에서에서 사용하는 것으로 애플리케이션 사이의 결합도를 낮춰 설계하는 아키텍쳐 스타일이다.
  • 즉, 결합도를 낮춰 서버 / 클라이언트가 별도로 구축되고 결합할 수 있게 하는 것이다.

API(Application Programming Interface)란?

  • 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것이다.

REST API는 REST 기반으로 서비스 API를 구현한 것이다.

REST API 제약 조건들

  1. Server-Client 구조
  2. Stateless(무상태) :서버는 클라이언트 상태 정보를 저장X so, 클라이언트 요청은 서버에서 필요한 모든 정보 담고 있어야 한다.
  3. Cacheable(캐시 처리 기능) :클라이언트는 응답 데이터 재사용 가능하도록
  4. Layered System(계층화) :확장성 있는 시스템 구성 가능
  5. Uniform Interface(인터페이스의 일관성)
  6. Code-On-Demand(Optional) :클라이언트는 서버로부터 실행 코드를 전송받아 기능을 일시적으로 확장 가능

XXS 공격이란? + 대응 방안

  • 웹 상에서 가장 기초적인 취약점 공격 방법중 하나로, 권한이 없는 사용자가 악의적인 용도로 웹 사이트에 스크립트를 삽입하는 공격 기법이다.
  • 다른 웹사이트와 정보를 교환하는 식으로 작동하므로 사이트 간 스크립팅이라고 부른다.
  • 자바스크립트를 사용하여 공격하는 경우가 가장 많다.
ex) 
URL에 악성 스크립트 포함하여 배포
게시판 등에 악성 스크립트가 포함된 글을 작성하여
게시글을 확인하는 사람을 대상으로 공격하는 방식 등

예방방법

  • 스크립트 등 해킹에 사용될 수 있는 코딩에 사용되는 입력 및 출력 값에 대해서 검증하고 무효화시켜야 한다.
  • 입력 값에 대한 유효성 검사는 데이터가 입력되기 전에 가능하면, 입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사해야 한다.

SQL Injection란? + 대응 방안

  • SQL Injection은 웹 사이트의 보안상 허점을 이용해 악의적인 SQL 쿼리 문을 주입하여 공격자가 원하는 DB의 중요한 정보를 가져오는 해킹 기법을 말한다.
  • 대부분 클라이언트가 입력한 데이터를 제대로 필터링 하지 못하는 경우에 발생한다.

인젝션 공격은 OWASP에서도 1순위로 분류되었던 만큼 공격이 성공할 경우 큰 피해를 입힐 수 있어 보안에 각별한 주의가 필요하다.

예방방법

  • 입력 값에 대한 검증 로직을 구현하여 사전에 정의된 특수 문자들이 입력되지 않도록 조치한다.
  • Prepared Statement 또는 매개변수화된 구문을 사용해서 입력 값에 들어가는 데이터는 단순히 문자열로 처리되도록 한다.
  • 불필요한 데이터베이스 에러 메시지가 사용자에게 노출이 되지 않도록 한다.

URL, URI, URN 차이

URI - 자원의 식별자
URL - 위치(Location)
URN - 이름(Name)

URI (Uniform Resource Identifier)

  • 통합 자원 식별자(Uniform Resource Identifier)는 인터넷에 있는 자원을 어디에 있는지 자원 자체를 식별하는 방법이다.

URL (Uniform Resource Locator)

  • 파일식별자(Uniform Resource Locator)는 네트워크 상에서 자원이 어디 있는지 위치를 알려주기 위한 규약이다.
    즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다.

URN (Uniform Resource Name)

  • 통합 자원 이름(Uniform Resource Name)은 urn:scheme 을 사용하는 URI를 위한 역사적인 이름이다.
  • URL이 리소스가 있는 위치를 지정한다면, URN은 리소스에 이름을 부여하는 것이다.

웹 캐시란?

사용자가 웹사이트(client)에 접속할 때, 정적 컨텐츠(JS,이미지, CSS)을 특정 위치에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하여 받는 것이 아닌, 특정 위치에서 불러옴으로서 사이트 응답 시간을 줄이고, 서버 트래픽 감소 효과를 볼 수 있는 것을 말한다.

프록시란?

  • 프록시(Proxy)란 '대리' 라는 의미를 갖고 있으며, 서버와 서버사이의 중계 역할을 한다.
  • 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.
  • 프록시를 쓰는 이유는 보안상의 이유로 직접 통신할 수 없는 두 점사이에서 대리로 통신을 수행하여 보안성, 성능, 안정성을 향상 시키기 위해서 이다.

프록시 서버는 네트워크 상 어디에 위치하느냐, 혹은 어느 방향으로 데이터를 제공하느냐에 따라 Forward Proxy 와 Reverse Proxy 로 나뉘게 된다.

포워드 프록시란?

  • 흔히 말하는 프록시 서버는 포워드 서버이다.
  • 프록시 서버는 클라이언트 바로 뒤에 놓여 있다.
  • 클라이언트(사용자)가 인터넷에 직접 접근하는 게 아니라 포워드 프록시가 요청을 받고 인터넷에 연결하여 서버 응답을 클라이언트에게 전달(Forward) 해준다.

장점

  • 방화벽과 같은 개념으로 제한을 위해 사용되므로, 특정 사이트에 접속하는 것을 막을 수 있다.
  • 클라이언트 요청은 포워드 프록시 서버를 통과할 때 암호화 되므로 클라이언트 ip를 감춰준다.

리버스 프록시란?

  • 웹서버/WAS 앞에 놓여 있는 것을 말한다.
  • 클라이언트가 인터넷에 데이터를 요청하면 리버스 프록시 서버가 해당 요청을 받아 내부 서버에서 데이터를 받은 후 클라이언트에게 응답한다.
  • 즉, 클라이언트는 웹서비스에 접근할때 웹서버에 요청하는 것이 아닌 프록시로 요청하게 되고, 프록시가 배후(reverse)의 서버로부터 데이터를 가져오는 방식이다.

장점

  • 특정 서버가 과부화 되지 않게 로드 밸런싱이 가능하다.
  • 본래 서버의 IP 주소를 노출시키지 않아 보안에 좋다.

__
Forward Proxy는 내부망에서 클라이언트와 Proxy 서버가 통신하여 인터넷을 통해 외부에서 데이터를 가져온다.
Reverse Proxy는 내부망에서 Proxy 서버와 내부망서버가 통신하여 인터넷을 통해 요청이 들어오면 Proxy 서버가 받아 응답해준다.

__
참고
쿠키, 세션
https://interconnection.tistory.com/74

토큰
https://velog.io/@boo1996/Token
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

SOP과 CORS
https://velog.io/@jesop/SOP%EC%99%80-CORS

REST API
https://rutgo-letsgo.tistory.com/158
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

XSS 공격
http://blog.plura.io/?p=7614
https://easymedia.net/Culture/EasyStory/?no=170&mode=view&IDX=1165&p=1

SQL Injection
https://maker5587.tistory.com/44

URI, URI, URN
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-URL-URI-%EC%B0%A8%EC%9D%B4
https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8-url-uri-urn-%EC%B0%A8%EC%9D%B4%EC%A0%90/

웹 캐시
https://hahahoho5915.tistory.com/33

프록시
https://dev-jwblog.tistory.com/161
https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC

0개의 댓글