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 이전과 동일한 종류의 방어 메커니즘이 필요합니다.