web-dev-qa-db-ja.com

角度:資格情報フラグがtrueの場合、ワイルドカード「*」は「Access-Control-Allow-Origin」ヘッダーで使用できません

CORSに関する質問は既にたくさんありますが、私の質問には答えていないようです。

したがって、Angularで記述されたクライアントアプリがあり、これは(Apache Cordovaを使用して)モバイルアプリの作成に使用されます。htmlファイルとJavaScriptファイルはモバイルデバイスから読み込まれます。それと、REST APIサーバーにリクエストを送信します。最初に「要求されたリソースに 'Access-Control-Allow-Origin'ヘッダーがありません。Origin 'http://localhost:82 'はアクセスを許可されていません」。したがって、header( "Access-Control-Allow-Origin:*");をphp REST API Serverに追加しました。特定のドメインを指定できません要求はモバイルデバイスから送信されるためです。

ここで、「資格情報フラグがtrueの場合、「Access-Control-Allow-Origin」ヘッダーでワイルドカード「*」を使用できません。」

私は最終的に解決策を見つけましたが、このように保管しても安全かどうかわかりません。

私のphp REST API Serverでこれを追加しました:

if (isset($_SERVER['HTTP_Origin'])) {
   header("Access-Control-Allow-Credentials: true");
   header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_Origin']);
   header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type");
   header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT");
}

この働き方についてアドバイスしてください。安全でない場合やまったく役に立たない場合は、この問題の解決方法を教えてください。

どうもありがとう!

17
mvermand

レスポンスのAccess-Control-Allow-Headersには受け入れられたヘッダーのみを含める必要があり、ワイルドカードは使用しないでください。

安全である限り、この中の@Julesからのコメントに注意してください CORSについての投稿

許可されたオリジンとしてHTTPオリジン値を送信すると、誰でもCookieを使用してリクエストを送信できるため、サイトにログインして攻撃者のページを閲覧したユーザーからセッションを盗む可能性があります。 「*」(Cookieを許可しないためセッションが盗まれないようにする)またはサイトを機能させる特定のドメインを送信する必要があります。

例については、以下も参照してください。

Access-Control-Allow-Headersではワイルドカードは使用できません

ヘッダーAccess-Control-Allow-Headersを指定


代替アプローチ

Originヘッダーを次のように設定できます。

Access-Control-Allow-Origin: *

リクエストにCookieを含める必要がない場合は、次を削除します。

Access-Control-Allow-Credentials: true

Access-Control-Allow-Headersからワイルドカードを削除し、Authorizationを追加してから、Cookieで資格情報を渡すのではなく、ヘッダーを認証リクエストの一部として渡します。

Authorization: Basic a2lkMT==

また、許可されたメソッドにOPTIONSを追加します。

12
BatteryAcid