次のようなシンプルで安全な同一サイトのクロスオリジン設定があります。
フロントエンド:https://www.example.com API:https://api.example.com
両方のドメインでAmazonが発行したSSL証明書(AWS ACM)を使用しています。
GET
弊社の顧客の中には Bit Defender Total Security をインストールしている人もいます。これは、複雑な資格情報や Cookie の交換を伴わない単純な呼び出しであっても、弊社の API への API 呼び出しをブロックします。
access-control-allow-origin
Bitdefender は実際の XHR リクエストのヘッダーを削除していることがわかりました。APIOPTIONS
の呼び出しにはヘッダーがまだ正しく残っています。
機能を無効にすると、オンライン脅威防止のWeb保護 > 暗号化されたWebスキャン「BitdefenderでChromeを再起動すると、期待どおりに動作し、GET
APIの呼び出しが正しく返されますaccess-controll-allow-origin=https://www.example.com
この問題は、API が のように同じドメインにある場合にも発生しません。https://www.example.com/api
これは、これが Bitdefender の CORS 関連の動作でもあることを示唆しています。
この機能の説明を読んで、Bitdefender が当社の証明書を気に入らないのかもしれないと思い、AWS 証明書を LetsEncrypt 証明書に置き換えました。ワイルドカード証明書でもありませんが、それでも同じ問題が発生します。
また、Bitdefender が中間者として動作し、おそらくリクエストをスキャンするために、私たちの証明書を独自のローカル証明書に置き換えていることにも気付きました。
私が理解できないのは、例えば詳しくはこちら同様の設定をしていますapi.graphql.imdb.comまた、AWS 証明書も使用します。
しかし、何らかの理由で証明書が置き換えられず、API リクエスト内の access-controll-allow-origin ヘッダーが削除されません。
これまでのところ、IMDBと私たちの間で私が見つけた唯一の違いは、彼らがTLS1.3 について彼らのリクエストに応じて、私たちはTLS1.2 について(AWS API Gateway経由)
これまでに見つけたオンライン ヘルプでは、顧客に Bitdefender のサイトでその機能をオフにするように依頼することしか提案されていません。この種の設定が IMDB で機能するのであれば、これは受け入れがたいと思います (まあ、Bitdefender によってホワイトリストに登録されているのかもしれません)。
私はこれを「誤検知」スレッド識別として Bitdefender にも報告しましたが、何も返ってきませんでした。
他に何を探すべきかのアイデアはありますか?
答え1
Bitdefenderチームは非常に役立ちました。Bitdefenderがアクティブになると、1.1 よりプロトコル。私たちのサーバーは、http/1では「Access-Control-Allow-Origin」ヘッダーを返さず、http/2でのみ返しました。Bitdefenderがなくても、
--http1.1
フラグをアクティブにしてcurlを使用するか、Chromeを で起動することで簡単にデバッグできました--disable-http2
。AWS APIゲートウェイ私たちの設定では、さらにグーグルで検索したところ、AWS が http/1 に対してリクエスト ヘッダーを少し異なる方法で解析していることがわかりました。
ヘッダー。おリギン対ヘッダー。oリギン
正しい応答ヘッダーを作成するために元の値を使用していますが、小文字を期待していたため、基本的に値を見つけることができませんでした。はい、たった 1 文字で何日もかかりました。このフォールバックを追加するだけでうまくいきました。
const origin = headers["origin"] || headers ["Origin"]
ヒントをくれたBitdefenderに感謝します!