web-dev-qa-db-ja.com

iframeリクエストがcookieを送信しないのはなぜですか?

兄弟部門が、ほんの一握りのiframeの足場となるHTMLファイルを作成しました。各iframeは、わずかに異なるパラメーターを使用して、Webサーバーでホストされているレポートを呼び出します。呼び出されたレポートには、認証されていないユーザーへのサインオンフォーム、または既に認証されたユーザーへのレポートコンテンツが表示されます。

scaffold.html:

<html>
   <head>
      <title>I just show the output from a bunch of report calls</title>
   </head>
   <body>
      <iframe src="https://somesite.com/useful_report.html?parameter1=a&parameter2=1" id="iframe1"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=b&parameter2=2" id="iframe2"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=c&parameter2=3" id="iframe3"></iframe>
      <iframe src="https://somesite.com/useful_report.html?parameter1=d&parameter2=4" id="iframe4"></iframe>
   </body>
</html>

兄弟組織は、ユーザーが https://somesite.com にサインオンした場合、上記の設定は適切に機能することを説明しました。各iframeは、helpful_report.htmlコンテンツを表示します...数日前まで。

私が

  1. https://somesite.com にサインオンしてから、
  2. file:/// C:/Users/me/Desktop/scaffold.htmlをChromeにロードします

各iframeは https://somesite.com サインオンフォームを返します。その後、別のタブで役立ちます_report.htmlを開くと、レポートコンテンツが読み込まれます(somesite.comがまだサインオンしていることを証明します)。

開発者ツールを使用すると、有用なレポートのリクエストヘッダーに「Cookie:」属性が含まれていないことがわかります。これが、有用なレポートがサインオンフォームを返す理由を説明しています。

私の質問はiframeリクエストがcookieを送信しないのはなぜですか?何Chromeおよび/またはサーバー設定/ポリシー/ディレクティブそれを防ぎますか?

‡-そして今、私はそれが知っていることを知っています。

14
Jeromy French

これは、SameSiteCookieポリシーが ChromeのデフォルトはLax であるためです。つまり、ユーザーが表示できない限り、Cookieは送信されません。 iframeを除外するURL。

somesite.comを所有している場合は、SameSiteポリシーをNoneに設定してこのポリシーをオプトアウトし、実行することでCSRF攻撃のリスクに対処できます Double Submit Cookie

3
Arash.m.h

ネイティブajaxまたはjquery ajaxを使用する場合は、async:falseを削除します。それは私のために働いた。

古いブラウザーでの互換性をさらに高めるために、私は http://easyxdm.net/wp/ を使用することをお勧めします。 EasyXDMのアプローチは、ajax呼び出しを行うホストにHTMLファイルを配置する必要があるiframeハックを使用することです。そして、これは強制的に非同期になります、はい。しかし、このeasyXDMのいいところは、corsヘッダーを気にする必要がないことです。

0
user10643043