1️⃣ 쿠키에 대해 설명해주세요.
쿠키란 클라이언트(웹 브라우저)에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다.
쿠키는 서버에서 클라이언트에게 전송되어 브라우저에 저장되며, 이후에 같은 서버에 요청을 보낼 때마다 쿠키는 요청과 함께 서버에 전송됩니다. 이를 통해 서버는 클라이언트의 상태를 추적하고, 로그인 정보나 사용자 설정 등을 저장하고 유지할 수 있습니다.
장점으로는 쿠키를 사용하면 클라이언트와 서버 간의 상태 유지가 가능해지므로, 사용자 경험을 향상시키고, 개인화된 서비스를 제공할 수 있습니다. 또한, 쿠키는 서버에 요청을 보내기 전에 브라우저에서 처리되므로 서버의 부하를 줄일 수 있습니다.
단점으로는 요청시 쿠키값을 그대로 보내기 때문에 보안에 취약하며, 쿠키의 크기가 클 경우 네트워크 부하가 커지게 됩니다.
쿠키의 동작 방식
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
2️⃣ 세션에 대해 설명해주세요.
세션은 일정 기간 동안 같은 사용자(클라이언트)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술입니다. 세션은 쿠키를 기반으로 하지만 쿠키와 다르게 서버 측에서 저장하고 관리합니다.
이를 통해 서버는 세션 ID를 이용해 클라이언트를 구분하며, 웹 브라우저가 서버에 접속해 브라우저를 종료할 때까지 세션을 유지합니다.
장점으로는 세션을 사용하면 쿠키와 달리 서버에 저장되므로 보안상 이점이 있습니다.
단점으로는 서버에 저장되는 정보가 많아진다면 서버의 부하가 발생할 수도 있다는 점이 있습니다.
3️⃣ CORS가 뭘까요?
SOP라는 같은 출처에서만 리소스를 공유할 수 있다라는 규칙을 가진 보안 정책이 있습니다.
이를 해결하기 위해 CORS가 등장하게 된 것인데, CORS란 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다.
CORS는 서버에서 응답 헤더를 설정하여 클라이언트에게 해당 도메인에서의 자원 공유가 허용되었는지 알려줍니다. 브라우저는 해당 헤더를 확인하고, 허용된 도메인에서만 자원을 가져와서 사용할 수 있습니다.
프론트엔드 관점에서는, 자바스크립트로 다른 도메인의 자원을 요청할 때, 브라우저는 먼저 해당 도메인의 서버에 CORS 요청을 보내게 됩니다. 서버는 이 요청을 받아서 응답 헤더를 설정하여 자원 공유가 가능한지 여부를 알려줍니다. 이후, 클라이언트는 이 응답 헤더를 확인하고, 허용된 경우에만 요청을 보내고, 자원을 사용합니다.
백엔드 관점에서는, 서버에서 클라이언트의 요청을 받았을 때, CORS 요청인지 확인하고, 응답 헤더를 설정하여 자원 공유가 가능한지 여부를 알려줍니다. 이를 통해, 다른 도메인에서의 API 호출이 가능하도록 설정할 수 있습니다.
4️⃣ REST에 대해 설명해주세요.
REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나로, 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다.
- Uniform Interface (일관된 인터페이스)
- Client-Server Architecture (클라이언트-서버 아키텍처)
- Statelessness (무상태성)
- Cacheability (캐시 가능성)
- Layered System (계층 구조)
- Code-On-Demand (선택적 코드 전송)
RESTful은 REST 아키텍처를 따르는 웹 서비스를 구현한 것을 의미합니다.
5️⃣ XXS가 뭘까요?
XSS란 '유저가 웹 페이지에 접속하는 것으로 올바르지 않은 스크립트가 실행되는 취약점 또는 공격방법' 을 말합니다.
이 공격은 웹이 사용자로부터 입력받은 값을 제대로 검사하지 않는 취약점을 사용하며 공격에 성공하면 사이트에 접속한 사용자는 공격자가 삽입한 코드를 실행하게 됩니다.
공격자는 보통 게시판, 메일, 닉네임등에 악성 코드를 심어놓고, 악성 코드의 실행 결과로 쿠키나 토큰등의 민감한 정보를 탈취하거나 의도치 않은 행동을 수행하도록 하는 공격입니다.
쿠키 탈취가 공격의 주된 목적이므로 쿠키를 보호하는 방지 대책이 많습니다.
- 쿠키에 중요한 정보를 담지 않는다
- Cookie의 HTTP ONLY 옵션 (코드에서 쿠키에 접근하는 것을 막는 옵션)
- 정보를 암호화 한다
6️⃣ SQL Injection 공격이 뭘까요? 어떻게 대비할 수 있을까요?
SQL Injection 공격은 공격자가 악의적인 SQL 쿼리문을 삽입하여 데이터베이스를 비롯한 시스템에 대한 악성 행위를 수행하는 것입니다.
SQL Injection 공격은 일반적으로 입력 폼, 쿼리 문자열 등을 통해 이루어지며, 입력값에 따라 쿼리문이 동적으로 생성되는 경우에 취약점이 발생할 수 있습니다. 예를 들어, 로그인 폼에서 아이디와 비밀번호를 입력하면, 입력값을 검증하여 해당 사용자의 정보를 가져오는 쿼리문이 생성됩니다. 이때, 입력값에 SQL 쿼리문을 삽입하여 데이터베이스를 조작할 수 있는 취약점이 발생할 수 있습니다.
SQL Injection 공격을 방지하기 위해서는, 유저에게 받은 값을 직접 SQL로 넘기지 않고, 입력값에 대한 검증과 이스케이핑을 수행하여 쿼리문에 악성 코드가 삽입되지 않도록 해야 합니다.
'CS' 카테고리의 다른 글
[CS 면접 준비] 컴퓨터 네트워크 (4) (0) | 2023.04.28 |
---|---|
[CS 면접 준비] 컴퓨터 네트워크 (3) (0) | 2023.04.25 |
[CS 면접 준비] 컴퓨터 네트워크 (2) (0) | 2023.04.17 |
[CS 면접 준비] 컴퓨터 네트워크 (0) | 2023.04.14 |
gdb로 register와 memory 변화 확인하기 (0) | 2022.09.05 |