CORS (Cross-Origin Resource Sharing)
1. 개요
CORS는 웹 애플리케이션이 다른 도메인에서 리소스를 요청할 때 발생하는 보안 메커니즘입니다. 기본적으로 웹 브라우저는 보안상의 이유로 다른 출처에서의 요청을 제한하지만, CORS를 사용하면 특정 조건을 만족하는 경우에 한해 이러한 제한을 해제할 수 있습니다.
Origin: 웹 페이지의 출처는 스키마(HTTP/HTTPS), 도메인, 포트를 조합하여 정의됩니다. 동일한 출처에서만 리소스를 요청할 수 있는 규칙을 'Same-Origin Policy'라고 합니다.
Preflight Request: 복잡한 요청(예: PUT, DELETE, 또는 특정 헤더가 있는 요청)인 경우 브라우저는 먼저 OPTIONS 메서드를 사용하여 서버에 사전 요청을 보내 CORS 정책을 확인합니다.
Access-Control-Allow-Origin: 서버는 응답 헤더에 이 필드를 포함시켜 어느 출처에서 요청을 허용할지를 지정합니다.
3. 활용 CORS는 API 서버가 여러 도메인에서 접근할 수 있도록 할 때 유용하며, 올바르게 설정하지 않으면 보안 문제가 발생할 수 있습니다.
CSRF (Cross-Site Request Forgery)
1. 개요
CSRF는 악의적인 웹사이트가 사용자를 속여 그들이 의도하지 않은 요청을 다른 웹사이트로 전송하게 하는 공격입니다. 이 공격은 사용자가 이미 인증된 상태에서 발생하여, 공격자가 사용자의 권한을 악용해 요청을 수행하게 합니다.
취약점 발생 조건: 사용자가 A 웹사이트에 로그인하여 세션 쿠키를 소지한 상태에서, B 악의적인 웹사이트에서 A 사이트로 요청을 보내는 링크를 클릭하면, 사용자는 모르게 A 사이트에 인증된 요청을 하게 됩니다.
공격 시나리오: 예를 들어, 사용자가 은행 사이트에 로그인한 상태에서 악성 사이트의 링크를 클릭하면 공격자가 사용자의 세션을 이용해 이체를 수행할 수 있습니다.
3. 방어 기법
CSRF 토큰 사용: 서버는 요청할 때마다 고유한 CSRF 토큰을 발급하고, 사용자가 요청을 보낼 때 이 토큰을 함께 제출하게 합니다. 서버는 이 토큰을 검증하여 요청의 정당성을 확인합니다.
SameSite 쿠키 설정: 쿠키에 SameSite 속성을 설정하여, 동일한 사이트에서 온 요청에서만 쿠키를 사용할 수 있도록 제한합니다.
CORS와 CSRF의 차이점
목적: CORS는 웹 애플리케이션이 다른 출처의 리소스에 접근할 때 발생하는 보안 문제를 해결하는 반면, CSRF는 악의적인 웹사이트가 사용자의 권한을 도용하는 공격을 방지하는 데 초점이 맞춰져 있습니다.
동작 방식: CORS는 서버의 설정을 통해 클라이언트의 요청을 허용할지 여부를 결정하는 메커니즘이고, CSRF는 사용자가 의도하지 않은 요청을 방지하기 위해 토큰이나 쿠키 속성을 사용하는 방법입니다.
위협 시나리오: CORS는 다른 출처의 API 호출과 관련된 위협을 다루고, CSRF는 사용자가 로그인된 상태에서 발생할 수 있는 의도치 않은 요청을 막습니다.
이 두 가지 개념을 잘 이해하고 적절하게 활용하면, 웹 애플리케이션의 보안을 크게 강화할 수 있습니다.