카테고리 없음
[컴퓨터네트워크] 쿠키, 세션, REST, 프록시, 로드밸런싱
ヽ(°ᴥ°)ノ
2024. 3. 21. 23:36
1. 쿠키 & 세션 & 토큰
- HTTP의 stateless, connectionless 특징때문에, 정보를 유지하고 있을 수 없다
- ex) 로그인하고나서도 매 페이지에서 로그인해야됨
1-1. 쿠키
- 브라우저에 저장되는 키-밸류로 이루어진 작은 데이터 파일
- 저장위치 : 클라이언트(브라우저)
- 저장형식 : key-value
- 사용예시 :
- 오늘 더이상 보지않음 체크
1-2. 세션
- 일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 서버에서 관리해서 유지시키는 기술
- 저장위치 : 서버
- 서버에서는 클라이언트를 구분하기 위해 세션ID 부여
1-3. 쿠키 vs 세션
- 세션이 쿠키보다 보안 좋은 이유?
- 세션은 정보를 서버측에 저장해놓기 때문에 보안 측면에서 쿠키보다 우수하다. 즉, 중요한 정보가 클라이언트의 브라우저에 직접 저장되지 않기 때문에 쿠키가 탈취되어도 정보가 노출될 위험이 적다. 쿠키는 클라이언트 측에서 직접 변경할 수 있지만, 세션은 서버에서만 변경 가능
- 세션과 쿠키의 라이프사이클
- 쿠키의 생명주기 : set-Cookie: expires (날짜 만료일 설정) / max-age (특정 시간 지나면)
- 세션의 생명주기 : 유효시간을 설정해 일정시간 응답이 없으면 끊거나, 브라우저가 종료되면 끊김
1-4. 토큰
- JWT 인증에 필요한 정보들을 Json 객체에 담은 후 비밀키로 서명한 토큰입니다. 서버/클라이언트 사이에서 인증/인가를 수행하기 위해 사용합니다.
- 헤더(header), 페이로드(payload), 시그니처(signature) 부분으로 이루어져있고, 각 부분은 점(.)으로 구분
- 헤더 : 토큰의 타입과 해시 암호화 알고리즘 정보
- 페이로드 : 토큰에 담을 정보 (사용자를 구분할 수 있는)
- 시그니처 : Secret key로 정보들을 암호화한것
2. 출처 정책
- 모두 출처(origin)과 관련된 내용
- 출처 구분 요소 : URL의 스킴(프로토콜), 호스트(도메인), 포트 3가지로 정의
2-1. 동일 출처 정책(Same Origin Policy, SOP)
- sop는 동일한 출처 사이에서만 리소스를 공유할 수 있도록하는 보안 정책
- ex) http://sub.tistory.com , https://sub.tistory.com : 다른 프로토콜을 공유하므로 다름
2-2. CORS
- CORS는 특정 출처를 서버가 명시해놓으면, 출처가 다르더라도 서버와 리소스를 주고 받을 수 있도록하는 보안 정책을 말합니다.
- 브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한하기 때문에, 요청 전에 서 서버의 동의가 필요합니다. 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절하는 메커니즘을 CORS(Cross-Origin Resource Sharing)라고 합니다.
3. REST
- Rest
- 먼저 Rest란 HTTP URI를 통해 자원을 명시하고 GET, POST, PUT, DELETE 메소드를 통해 해당 자원에 대한 CRUD연산을 적용해, API 가독성을 높인 구조화된 소프트웨어 아키텍처
- 특징
- 클라이언트-서버 구조
- 자원이 있는 쪽이 Server, 자원 요청하는 쪽이 Client
- 무상태성
- 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리, 즉 이전요청이 다음 요청 처리에 연관되지않음
- 캐시처리 등등
- 클라이언트-서버 구조
- Rest API
- Rest API란 REST의 특징을 기반으로 서비스 API를 구현한 것을 말합니다. REST API의 가장 큰 특징은 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능한 것 입니다.
- Restful API
- 대개, REST 원리를 따르는 시스템을 RESTful하다고 말한다.
- 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것 → API의 목적을 명확히 하기 위함
- RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.
4. 웹 공격
4-1. SQL injection
- 공격자가 악의적인 SQL 쿼리문을 서버에 전송하고 실행하게 해서, 데이터베이스가 비정상적인 동작을 하도록 조작하는 공격
- 대응 방안
- 입력값 검증
- 미리 선언된 SQL만 사용하도록 (stored procedure)
4-2. XSS 공격 (Cross Site Scripting)
- 웹 애플리케이션에서 많이 나타나는 취약점 중 하나로, 공격자가 클라이언트 코드에 악성 스크립트를 삽입하는 공격
- 주로, 사용자로부터 입력 받은 값을
- 공격자가 웹사이트에 악성 스크립트를 심은 클릭 유도글 작성
- 사용자가 클릭
- 클릭한 사용자의 정보 빼냄
- 대응 방안
- 입력값 검증 (ex. 입력값 검증하는 필터 제작)
4-3. CSRF 공격 (Cross Site Request Forgery)
- 특정 웹사이트에 인증된 사용자가 자신의 의지와 상관없이 공격자가 의도한 행위를 웹사이트에 요청하게 하는 공격
- 위조된 요청을 서버에 보냄 -> 서버는 인증된 사용자의 유효한 요청이라 판단하고 요청 처리 (ex. 비밀번호 변경)
- 대응 방안
- csrf 유효성 검증 : 임의의 csrf 토큰을 생성해서, 그 값도 같이 전송하도록 인증
- referrer 유효성 검증 : 요청헤더의 referrer 필드 값 확인해서, 동일도메인으로부터 온 요청인지 확인
5. 프록시
5-1. 프록시 서버
- 클라이언트와 서버간의 중계서버로, 통신을 대리 수행하하는 서버
- 캐시, 보안, 트래픽 분산 등 여러 장점 -> 보안성, 성능, 안정성 향상시키기 위해
5-2. 포워드 프록시
- 클라이언트 - 포워드프록시 - 인터넷 - 서버
- 특징
- 캐싱 : 클라이언트의 요청과, 그에 대한 응답을
- 전송 시간 절약, 불필요한 외부 전송 X, 서버 부하 감소
- 익명성 : 클라이언트가 보낸 요청을 감춤
- 서버가 응답받은 요청을 누가 보냈는지 알지 못하게함 -> 서버가 받은 요청 IP = Proxy IP
- 캐싱 : 클라이언트의 요청과, 그에 대한 응답을
5-3. 리버스 프록시
- 클라이언트 - 인터넷 - 리버스프록시 - 서버
- 특징
- 캐싱
- 보안 : 서버 정보를 클라이언트로부터 숨김
- 클라이언트는 리버스 프록시를 실제 서버라고 생각해서 요청
- 로드밸런싱 : 서버의 부하를 분산시키는 것
- ex) 우리가 구성하는 일반적인 WEB(Apache, nginx) - WAS(Tomcat) 분리 형태를 Reverse 프록시라고 보면 된다.
여기서 WEB(Apache, nginx)가 reverse proxy가 된다.
5-4. 로드 밸런싱
- 서버에 가해지는 부하(=Load)를 분산(=Balancing)해주는 장치 또는 기술
- 사용 이유
- 대량의 트래픽이 들어올때 대응하기 위한 2가지 방법
- Scale up : 서버 하드웨어 자체의 성능을 높임
- Scale out : 여러개의 서버를 두는 것 -> ✅ 여러대의 서버로 트래픽을 균등하게 분산시켜주는 로드밸런싱 필요
- 서버 선택 기준
- 라운드 로빈 : 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
- Least Connection : 연결 갯수가 가장 적은 서버 선택 (가장 많이 사용되는 방식)
- 로드 밸런싱 종류
- L4 로드 밸런싱
- 전송 계층에서 부하 분산 -> IP, Port 번호 이용해서 부하 분산
- L7 로드 밸런싱
- 애플리케이션 계층에서 부하 분산
- 사용자 요청 기준 (url, 헤더, 쿠키 등)으로 특정 서버에 트래픽 분산
- L4 로드 밸런싱