Development Tip

CORS 오류를 트랩 할 수 있습니까?

yourdevel 2020. 12. 31. 23:03
반응형

CORS 오류를 트랩 할 수 있습니까?


이 질문은 Cross-Origin Resource Sharing (CORS, http://www.w3.org/TR/cors/ )과 관련이 있습니다.

CORS 요청시 오류가 발생하면 Chrome (및 AFAIK 다른 브라우저도 포함)은 오류 콘솔에 오류를 기록합니다. 예제 메시지는 다음과 같습니다.

XMLHttpRequest를로드 할 수 없습니다 http://domain2.example. Origin http://domain1.example은 Access-Control-Allow-Origin에서 허용되지 않습니다.

이 오류 메시지를 프로그래밍 방식으로 얻을 수있는 방법이 있는지 궁금합니다. xhr.send()try / catch에서 호출을 래핑 하려고 시도했으며 onerror()이벤트 처리기를 추가해 보았습니다 . 둘 다 오류 메시지를 수신하지 않습니다.


보다:

... 또한 CORS에 대한 XHR 레벨 2의 참고 사항 :

정보는 의도적으로 필터링됩니다.

몇 달 후 편집 : 여기에 "왜"를 묻는 후속 댓글이 있습니다. 첫 번째 링크의 앵커에 몇 개의 문자가 누락되어 문서의 어떤 부분을 참조했는지 확인하기가 어려웠습니다.

이는 보안 문제입니다. 민감한 HTTP 헤더에 정보를 노출하지 않으려는 시도입니다. CORS에 대한 W3C 링크는 다음과 같이 말합니다.

사용자 에이전트는 단순 응답 헤더이거나 필드 이름이 Access-Control-Expose-Headers 헤더 (있는 경우) 값 중 하나에 대해 ASCII 대소 문자를 구분하지 않는 일치를 제외한 모든 응답 헤더를 필터링해야합니다. CORS API 사양에 정의 된 API에 응답 헤더를 노출하기 전에

이 구절에는 Cache-Control, Content-Language, Content-Type, Expires, Last-Modified 및 Pragma를 나열하는 "단순 응답 헤더"에 대한 링크가 포함되어 있습니다. 그래서 그것들은 통과됩니다. "Access-Control-Expose-Headers 헤더"부분을 사용하면 원격 서버가 다른 헤더도 여기에 나열하여 노출 할 수 있습니다. 자세한 내용은 W3C 설명서를 참조하십시오.

하나의 출처가 있음을 기억하십시오. 즉, 브라우저에로드 한 웹 페이지가 JavaScript를 실행하고 있다고 가정 해 보겠습니다. 스크립트는 다른 출처에 요청을 보내고 있습니다. 이는 맬웨어가 다음과 같은 불쾌한 일을 할 수 있기 때문에 일반적으로 허용되지 않습니다. 방법. 따라서 스크립트를 실행하고 대신 HTTP 요청을 수행하는 브라우저가 게이트 키퍼 역할을합니다.

브라우저는 "다른 원본"서버의 응답을보고 CORS에서 "일부"가 아닌 것 같으면 (필요한 헤더가 누락되었거나 형식이 잘못된 경우) 신뢰할 수없는 위치에 있습니다. 로컬에서 실행되는 스크립트가 이러한 방식으로 연결될 것으로 예상하지 않는 서버에 연결하려고 시도하는 것처럼 보이기 때문에 스크립트가 성실하게 작동하는지 확신 할 수 없습니다. 브라우저는 필터링없이 전체 응답을 스크립트에 전달함으로써 원격 서버에서 민감한 정보를 "유출"해서는 안됩니다. 이는 기본적으로 교차 출처 요청을 허용 하는 입니다. 정보 유출 취약점이 발생합니다.

이것은 디버깅을 어렵게 만들 수 있지만, "사용자"가이 맥락에서 개발자이기 때문에 보안에 중요한 우선 순위가 부여되는 보안 대 사용성 절충입니다.

참조 URL : https://stackoverflow.com/questions/4844643/is-it-possible-to-trap-cors-errors

반응형