CORS에 대해 읽은 후 보안을 향상시키는 방법을 이해하지 못합니다.
CORS는 보안을 향상시키지 않습니다. CORS는 서버가 외부 도메인에서 액세스하는 방법을 브라우저에 알리는 메커니즘을 제공하며 CORS 이전에 존재했던 브라우저 보안 모델 (즉, 동일한 출처 정책) 과 일치하는 방식으로이를 시도합니다. ) .
그러나 동일 출처 정책 및 CORS는 범위가 제한됩니다. 특히 CORS 사양 자체에는 요청을 거부하는 메커니즘이 없습니다. 헤더를 사용하여 외부 도메인의 페이지가 응답을 읽지 못하도록 브라우저에 알릴 수 있습니다. 또한 프리 플라이트 요청의 경우 외부 도메인에서 특정 요청을 보내지 않도록 브라우저에 요청할 수 있습니다. 그러나 CORS는 서버가 실제 요청을 거부 (즉, 실행하지 않음)하는 수단을 지정하지 않습니다.
예를 들어 보겠습니다. 사용자가 사이트에 로그인되어 있습니다.A
쿠키를 통해 . 사용자 M
가를 수행하는 양식을 제출하려고하는 악성 사이트를로드 POST
합니다 A
. 무슨 일이 일어날 것? CORS의 유무 M
에 관계없이 , 허용 도메인 유무 에 관계없이 브라우저는 A
사용자의 인증 쿠키와 함께 요청을 보내고 서버는 악성 프로그램을 실행합니다.POST
사용자가 시작한 것처럼 을 합니다.
이 공격을 Cross-Site Request Forgery라고합니다. 하며 CORS 자체는이를 완화하기 위해 아무것도하지 않습니다. 그렇기 때문에 사용자를 대신하여 데이터 변경 요청을 허용하는 경우 CSRF 보호가 매우 중요합니다.
이제 Origin
헤더 사용은 CSRF 보호의 중요한 부분이 될 수 있습니다. 실제로이를 확인하는 것은 다각적 인 CSRF 방어에 대한 현재 권장 사항의 일부입니다 . 그러나 그 사용Origin
헤더의 CORS 사양을 벗어납니다.
요컨대 CORS는 기존의 동일 출처 정책 보안 모델을 다른 허용 도메인으로 확장하는 데 유용한 사양입니다. 보안을 추가하지 않으며 사이트에는 CORS 이전과 동일한 종류의 방어 메커니즘이 필요합니다.