CORS制限を使用してAPIサーバーのセキュリティを維持する必要があります。
Access-Control-Allow-Origin : http://myonlinesite.com
しかし、モバイルアプリ(Android + iO)でこのAPIにアクセスできるようにする必要もあります。
私が見つけたすべての解決策は、すべてのOriginを許可するように言っています:*
、しかしこれはAPIにとって大きなセキュリティ障害になります。
WebViewがローカルファイルを提供し、したがって送信するCordovaでアプリを構築しています:Origin: null
、すべてのhttp(s)要求に対して。許可されたOriginにnull
を追加することを考えています。 APIを取得しようとする他のすべてのWebサイトをブロックするため、より優れていますが、モバイルアプリはそれを取得できます...
これにもっと面白い解決策はありますか?
ありがとうございました!
したがって、許可されたOriginにnullを追加することを考えています。 APIを取得しようとする他のすべてのWebサイトをブロックするため、より優れていますが、モバイルアプリはそれを取得できます...
それを行うと、anynon-http/https Originから実行されるJavaScriptコードからのリクエストを許可します。これには、 file://
あるいは data:
URL。
したがって、「セキュリティ」の理由で制限的なCORSポリシーを使用している場合は、Access-Control-Allow-Origin: null
ヘッダーは、かなり悪い考えのように聞こえます。
CORS制限を使用してAPIサーバーのセキュリティを維持する必要があります。見つかったすべてのソリューションは、すべてのOriginを許可するように言っています:
*
、しかしこれはAPIにとって大きなセキュリティ障害になります。
セキュリティの障害だと判断した理由や、CORSポリシーを制限する必要がある理由については説明しません。ただし、(1)Webサーバーがイントラネットまたは他の種類のファイアウォールの背後で実行されており、(2)リソースへのアクセスがIP認証によってのみ制限されている場合を除き、制限付きCORSポリシーを使用しても何も得られません。 仕様を引用 :
基本的な安全なCORSプロトコルのセットアップ
IP認証またはファイアウォール(残念ながら比較的一般的)によってデータが保護されているリソースの場合、CORSプロトコルの使用は安全ではありません。 (これが、CORSプロトコルを発明しなければならなかった理由です。)
ただし、それ以外の場合は、次のヘッダーを使用しても安全です。
Access-Control-Allow-Origin: *
リソースがCookieまたはHTTP認証に基づいて追加情報を公開する場合でも、上記のヘッダーを使用しても明らかになりません。
XMLHttpRequest
やcurl
と既に共有されているように、wget
などのAPIとリソースを共有します。したがって、言い換えると、
curl
およびwget
を使用してWebに接続されたランダムなデバイスからリソースにアクセスできない場合、前述のヘッダーは含まれません。ただし、アクセスできる場合は、アクセスしても問題ありません。
Sideshowbarkerの回答で指摘したように、Access-Control-Allow-Origin: null
アプリをブラウザコンテキストで開くことができる場合、安全とは見なされません。ただし、専用のWebビューで実行されているアプリのセキュリティリスクはありません。
Same Origin Policy(CORSが拡張)は、特定の種類の脅威のために設計されています。ブラウザで実行される外部ドメインからのスクリプト、認証Cookieを含むサーバーへのリクエストの送信。ただし、専用のWKWebView
でアプリを実行している場合、Cookieを使用してサーバーにリクエストを送信できる外部スクリプトはありません。