-
Notifications
You must be signed in to change notification settings - Fork 0
MS_CrossDomainConnection
-
TOP > インフラストラクチャ > WebAPI
- クロス ドメイン接続
- CORS (Cross-Origin Resource Sharing)
- WebAPIの認証
本命は CORS。
- 2014 年 1 月に W3C 勧告になり、
- そして、最近は、CORS が一般的になってきた。
移行メモ(補足): CORS の仕様は 2014 年に W3C 勧告となった後、 現在は WHATWG の Fetch Standard に統合されている (W3C 側の CORS 仕様は廃止された)。
CORS (Cross-Origin Resource Sharing)
iframe と(HTML5 の)postMessage を使った Cross Document Messaging による解決方法。
- サーバとは
iframe経由で通信する。 - 親コンテンツと
iframeコンテンツ間の通信にpostMessageを用いる。
補足:
postMessageを使う場合、 送信側はtargetOriginを"*"にせず具体的なオリジンを指定し、 受信側はevent.originを必ず検証すること。 これを怠ると任意のサイトからメッセージを注入できてしまう。
-
js ファイル(正確には、
scriptタグのsrc属性)は、
異なるドメイン上に配置されていても参照・実行できる特性を利用し、- 異なるドメインのサーバと、この js ファイルの
src属性を経由して通信する。- クライアント側で異なるドメインと通信するための
scriptタグを動的に生成、 -
src属性には、URL の QueryString に?callback=parseResponseなどと書く。 - サーバーは、
parseResponse({"JSON文字列"})的なレスポンスを返す。 - クライアント側の Callback の引数に JSON が指定され処理できる。
- クライアント側で異なるドメインと通信するための
- 異なるドメインのサーバと、この js ファイルの
-
特徴
- JSONP では認証との組み合わせが困難。
- GET の URI の一部の形で付帯情報を渡す必要がある。
- 単に、CORS の仕組みが無いだけ。
補足(最新化): JSONP は、 レスポンスがそのままスクリプトとして実行されるため、 接続先が信頼できない場合は任意コード実行に直結する。 また、
Refererや Cookie が付いた GET になるため CSRF 的な情報漏洩(JSON ハイジャック)の温床でもあった。 CORS が全ブラウザで利用できる現在、 新規に JSONP を採用する理由はない。
接続先のサーバに
clientaccesspolicy.xml- または
crossdomain.xml
という名前の「ポリシー ファイル」を配置する。
接続先のサーバに crossdomain.xml という名前の「ポリシー ファイル」を配置する。
補足(最新化): Silverlight(2021 年サポート終了)と Flash(2020 年末で提供終了)はいずれも廃止されている。 ただし、
crossdomain.xmlを放置したままのサーバは今も存在し、 内容によっては(allow-access-from domain="*"など) 現在も情報漏洩の指摘対象になるため、 不要なら削除するのが望ましい。 なお、その挙動を抑止するヘッダがX-Permitted-Cross-Domain-Policiesである。
Tags: プログラミング, 通信技術, .NET開発, .NET Core, ASP.NET, ASP.NET Web API
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。