내가 CORS에 대해 이해하는 바로는 이것이 작동 방식입니다. X. X 페이지를 제공하는 사이트 foo.com이 있습니다. X는 다른 도메인 표시 줄에 데이터를 게시하려고합니다. com. bar.com이 CORS를 사용하는 경우 (헤더에서 Access-Control-Allow-Origin foo.com을 생성 한 경우) 이제 X 페이지는 bar.com으로 데이터를 보낼 수 있습니다.CORS (Cross Origin Resource Sharing) 작동 방식에 대한 혼란
CORS를 작동 시키려면 bar.com에서 설정하는 것이 좋으며 foo.com과는 관련이 없습니다. bar.com이 이전 도메인의 요청을 허용하지 않도록하는 것이 중요합니다.
그러나이 은 실제로이 아닙니다. 나는 CORS가 foo.com이 누구와 통신 할 수 있는지를 지시 할 수 있도록 설계되었다고 생각했습니다. 앞의 예제로 돌아가지만 이번에는 X가 dodgy 스크립트에 의해 손상되어 evil.com에 비밀리에 데이터를 보내면 어떻게 CORS가이를 멈추게할까요? evil.com은 CORS가 활성화되어 있으며 *로 설정되어 있으므로 어떤 요청도 수락합니다. 사용자가 사이트 foo.com을 사용한다고 생각하는 그런 식으로 무의식적으로 데이터를 evil.com에 보냅니다.
바코드 자체에 대한 모든 것이 사실이라면 브라우저가 정책을 적용하는 이유는 무엇입니까? foo.com을 가장하여 bar.com으로 데이터를 보내려고하는 Y 페이지를 제공하는 evil.com을 가지고있는 경우 이것이 당연한 생각할 수있는 상황입니다. 하지만 CORS는 브라우저에 의해 시행되며, evil.com을 bar.com에 가짜 요청을 보내는 프록시로 만듭니다 (데이터는 Y에서 evil.com으로, evil.com은 foo로 설정 됨). 그런 다음 bar.com으로 보냅니다.)
다른 방식으로 작동하는 경우 나에게 의미가 있습니다. foo.com은 CORS가 사용 가능하며 해당 헤더는 Access-Control-Allow-Origin bar.com으로 설정됩니다. 그렇게하면 루즈 스크립트는 브라우저에서 evil.com에 액세스하지 못하게됩니다. 그런 다음 스크립트가 실행되기 때문에 브라우저가 정책을 시행하는 것이 좋습니다. 루즈 사이트가 루즈 데이터를 bar.com에 보내지 못하도록 막지는 않지만 bar.com은 사용자 이름/암호로 자신을 보호 할 수 있습니다. foo.com에 X에서 데이터가 반환 될 것으로 예상되는 엔드 포인트가있는 경우 evil.com이 대신 데이터를 보내지 않도록 X에 토큰을 포함 할 수 있습니다.
나는 여기에서 근본적으로 중요한 것을 이해하지 못한다고 생각합니다. 도움을 정말로 바랄 것입니다.
나는 똑같은 것을 생각하고있었습니다. CORS의 모든 설명에는 프록시를 통해 어떻게 회피 될 수 있는지에 대한 면책 조항이 있어야합니다. 이런 종류의 공격을 탐지하는 것이 어떻게 쉬운 지 확신 할 수 없습니다. 잘하면 TJ가 말한 것처럼주의하고주의를 기울이지 만 대부분의 경우 쉽게 눈치 채지 못할 것이라고 상상합니다. –