쿠키
클라이언트 측에서 저장하는 서버의 정보
웹 브라우저에서 서버에 요청할 떄, 해동 요청과 쿠키가 함께 전송된다.
쿠키를 통해 서버는 클라이언트의 상태를 저장할 수 있다.
세션
서버 측에서 저장되는 클라이언트의 상태
사용자가 웹 사이트에 접속하면 세션 ID가 생성되며, 이 ID를 이용해 서버는 클라이언트의 정보를 저장한다.
(클라이언트는 요청할 때마다 세션 ID를 보내줘야 한다)
웹에서 서버에게 정보를 안전하게 전송하는 표준 방법 중 하나이다.
(JWT 토큰은 정보를 JSON 형식으로 주고받는 것을 의미)
주로 사용자 인증에 사용된다.장점
1. 필요한 정보를 자체적으로 포함하므로, 별도의 저장소에 의존하지 않는다.
2. 서명을 통해, 토큰의 무결성을 보장할 수 있다.단점
여러 메타데이터를 담고 있고, 인코딩되는 과정에서 크기가 커진다.
이로 인해 네트워크 트래픽이 늘어날 수 있다.
SOP
Same Origin Policy의 약자로,
동일한 출처에서만 리소스를 공유할 수 있다는 정책을 의미한다.
(출처(Origin) - 프로토콜, 호스트, 포트)이를 통해 보안을 강화할 수 있지만,
출처가 다른 요청을 모두 거부하기 때문에 다른 도메인의 리소스를 사용할 수 없다는 단점이 있다.
CORS
웹 애플리케이션에서 다른 출처(origin)로부터의 리소스 공유에 대한 요청을 허용할지 안 할지 결정하는 정책을 말한다.CORS를 통해 클라이언트는 다른 도메인의 리소스를 사용할 수 있다. (허용한 서버에 대해서만)
웹 브라우저는 다른 출처의 리소스를 요청하는 경우,
Origin 헤더에 현재 요청의 출처를 담는다.
서버는 Origin 헤더를 통해 현재 요청을 허용할지 거부할지 결정할 수 있다.
서버가 요청을 하용하는 허용하는 경우 응답에 Access-Control-Allow-Origin 헤더가 담겨져서 전송된다.만약 현재 요청이 안전하지 않은 요청일 경우
(리소스를 변경하는 요청 - PUT, PATCH, DELETE 등)
예비 요청을 통해 가능한 출처를 확인한다. (OPTIONS로 요청)
REST(Representational State Transfer)란 웹 서비스를 구축하는 데 사용되는 아키텍처 스타일이다.
HTTP를 기반으로 하며, 리소스를 주고받는 방법을 정의한다.특징
1. URI를 통해 리소스를 표현한다.
2. HTTP Method를 통해, 행위를 표현한다.
3. Stateless 해야 한다.REST의 원리를 따르는 API를 RESTful API라고 한다.
- Stateless 해야 한다.
- 요청에 대한 응답 내의 데이터에 해당 요청은 캐시가 가능한지 불가능 한지 명시해야 한다.
- URI로 지정된 리소스에 균일하고 통일된 인터페이스를 제공해야 한다.
URI(Uniform Resource Identifier)는 특정한 리소스를 고유하게 식별하는 식별자를 의미한다.
URL과 URN을 모두 포함하는 상위 개념이다.
URL(Uniform Resource Located)는 리소스의 위치를 나타낸다.
프로토콜, 호스트, 리소스 경로로 구성된다.
URN(Uniform Resource Name)는 리소스의 이름을 나타낸다.
XSS(Cross-Site Scripting)은 웹사이트에 악성 스크립트를 주입하는 행위
악의적인 사용자가 주입한 악성 스크립트를 통해, 다른 사용자의 정보를 탈취할 수 있다.이를 막는 방법
1. 사용자의 입력값을 검증한다.
2. CSP(Content Security Policy)를 통해, 웹 페이지에서 실행되는 스크립트의 출처를 제한하고, 허용된 리소스만 로드할 수 있도록 정책을 설정한다.
CSRF(Cross-Site Request Forgery) 공격은 인증된 사용자의 권한을 이용하여 악의적인 요청을 서버에 전송하는 공격이다.
CSRF 토큰을 이용해 사용자의 요청을 검증할 수 있다.
이를 통해 CSRF 공격을 막을 수 있다.
응용 프로그램 보안 상의 허점을 이용해, 악의적인 SQL문을 실행되게 함으로써, DB를 비정상적으로 조작하는 공격이다.
문자열 연결로 동적쿼리를 생성할 때 취약하다.
방어하는 방법
1. 파라미터 바인딩으로 SQL을 생성한다.
2. sql에서 특수한 의미를 가진 문자들을 차단한다.
웹 브라우저나 서버에서 저장되는 임시 저장소를 의미한다.
이전에 요청했던 리소스를 캐시에 저장함으로써, 동일한 리소스에 대한 요청을 빠르게 처리할 수 있다.대표적으로 브라우저 캐시와 프록시 캐시가 있다.
브라우저 캐시: 로컬 컴퓨터에 저장되는 캐시
프록시 캐시: 프록시 서버에 저장되는 캐시캐시의 지속시간을 관리하기 위해 Cache-Control, ETag, Last-Modified 헤더가 사용된다.
클라이언트와 서버 사이에서 중간 역할을 하는 서버이다.
클라이언트와 서버가 요청과 응답을 주고받을 때, 프록시 서버를 거친다.
이때 프록시 서버가 캐싱과 보안 등의 기능을 제공해줄 수 있다.
클라이언트 앞에 둔 프록시를 의미한다.
포워드 프록시를 통해 IP 주소를 우회할 수 있고,
(클라이언트 대신 프록시가 서버에 요청)
캐싱, 보안 기능을 제공할 수 있다.
서버 앞에 둔 프록시를 의미한다.
리버스 프록시를 통해 외부의 요청을 감시 & 보호할 수 있고,
로드 밸런싱 기능을 제공할 수 있다.
(로드 밸런싱 - 부하를 분산해서 성능을 개선하는 기능)
HTTP 및 HTTPS와 같은 응용 계층의 프로토콜을 기반으로 동작하는 로드 밸런싱 기술을 말한다.
L7 로드 밸런서는 클라이언트의 요청을 해석하여, 특정한 요청을 처리할 서버로 전달한다.
커넥션 타임아웃(Connection Timeout)은 클라이언트가 서버에 연결을 시도할 때 소요되는 시간을 의미한다.
클라이언트가 서버에게 연결을 요청한 후, 일정한 시간이후에도 응답이 없을 떄 발생한다.
리드 타임아웃(Read Timeout)은 클라이언트가 서버로부터 데이터를 수신하는 데 소요되는 시간을 의미한다.
클라이언트가 서버에 요청을 보낸 후 일정 시간 동안 서버로부터 응답이 없거나 데이터가 수신되지 않는 경우에 발생한다.