다음과 같이 간단하고 안전한 동일 사이트, 교차 출처 설정이 있습니다.
프런트엔드:https://www.example.com API:https://api.example.com
두 도메인 모두 Amazon(AWS ACM)에서 발급한 SSL 인증서를 사용합니다.
일부 고객은 Bit Defender Total Security를 설치하여 자체 API에 대한 API 호출을 차단합니다. 심지어 GET
멋진 자격 증명/쿠키 교환이 필요하지 않은 간단한 호출도 차단합니다.
access-control-allow-origin
Bitdefender가 실제 XHR 요청에서 헤더를 제거한다는 것을 알았습니다 . OPTIONS
API에 대한 호출에는 여전히 헤더가 올바르게 있습니다 .
기능을 비활성화하면 "온라인 위협 예방의 웹 보호 > 암호화된 웹 검사" Bitdefender에서 Chrome을 다시 시작하면 예상대로 작동하고 GET
API 호출이 올바르게 반환됩니다.access-controll-allow-origin=https://www.example.com
API가 와 같은 동일한 도메인에 있는 경우에도 문제가 발생하지 않습니다 https://www.example.com/api
. 이는 이것이 Bitdefender의 CORS 관련 동작이기도 함을 나타냅니다.
이 기능에 대한 설명을 읽으면서 아마도 bitdefender가 우리 인증서를 좋아하지 않을 것이라고 생각하여 AWS 인증서를 LetsEncrypt 인증서로 교체했습니다. 와일드카드 인증서도 아닙니다. 여전히 같은 문제입니다.
또한 Bitdefender가 우리 인증서를 자체 로컬 인증서로 대체하여 중간자 역할을 한다는 사실도 확인했습니다. 아마도 요청을 스캔하는 것 같습니다.
내가 이해하지 못하는 것은 예를 들어www.imdb.com그들과 비슷한 설정이 있습니다api.graphql.imdb.comAWS 인증서도 사용합니다.
그러나 어떤 이유로 인증서가 교체되지 않고 access-controll-allow-origin 헤더가 API 요청에서 제거되지 않습니다.
지금까지 우리와 IMDB 사이에서 제가 발견한 유일한 차이점은 그들이 다음을 사용한다는 것입니다.TLS 1.3그들의 요청에 따라 우리는TLS 1.2(AWS API 게이트웨이를 통해)
지금까지 제가 찾은 온라인 도움말에서는 고객에게 자신의 사이트에서 Bitdefender의 해당 기능을 전환하도록 요청하라는 제안만 제안했는데, 이러한 종류의 설정이 IMDB에서 작동하는 경우 받아들이기 어렵습니다(글쎄, Bitdefender에서 허용 목록에 추가했을 수도 있음).
또한 이를 "거짓 긍정" 스레드 식별로 Bitdefender에 보고했지만 그로부터 아무 것도 돌아오지 않았습니다.
내가 찾을 수 있는 다른 아이디어가 있나요?
답변1
Bitdefender 팀은 매우 도움이 되었습니다. Bitdefender가 활성화되면 다음으로 다운그레이드되는 것으로 나타났습니다.http/1.1규약. 우리 서버는 http/1에 대해서는 "Access-Control-Allow-Origin" 헤더를 반환하지 않고 http/2에 대해서만 반환했습니다. --http1.1
플래그가 활성화 된 컬을 사용하거나
--disable-http2
. 우리는 사용하고 있습니다AWS API 게이트웨이우리 설정에서 좀 더 인터넷 검색을 한 후에 AWS가 http/1에 대해 약간 다른 요청 헤더를 구문 분석하고 있다는 것을 알았습니다.
헤더.영형rigin 대 헤더.영형리진
우리는 올바른 응답 헤더를 생성하기 위해 원점 값을 사용하고 있으며 소문자를 예상하기 때문에 기본적으로 값을 찾을 수 없습니다. 네, 편지 한 통만 쓰는데 며칠이 걸렸어요. 이 폴백을 간단히 추가하면 효과가 있었습니다.
const origin = headers["origin"] || headers ["Origin"]
힌트를 주신 Bitdefender에게 감사드립니다!