兄弟部門が、ほんの一握りの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¶meter2=1" id="iframe1"></iframe>
<iframe src="https://somesite.com/useful_report.html?parameter1=b¶meter2=2" id="iframe2"></iframe>
<iframe src="https://somesite.com/useful_report.html?parameter1=c¶meter2=3" id="iframe3"></iframe>
<iframe src="https://somesite.com/useful_report.html?parameter1=d¶meter2=4" id="iframe4"></iframe>
</body>
</html>
兄弟組織は、ユーザーが https://somesite.com にサインオンした場合、上記の設定は適切に機能することを説明しました。各iframeは、helpful_report.htmlコンテンツを表示します...数日前まで。
私が
各iframeは https://somesite.com サインオンフォームを返します。その後、別のタブで役立ちます_report.htmlを開くと、レポートコンテンツが読み込まれます(somesite.comがまだサインオンしていることを証明します)。
開発者ツールを使用すると、有用なレポートのリクエストヘッダーに「Cookie:」属性が含まれていないことがわかります。これが、有用なレポートがサインオンフォームを返す理由を説明しています。
私の質問はiframeリクエストがcookieを送信しないのはなぜですか?何Chromeおよび/またはサーバー設定/ポリシー/ディレクティブそれを防ぎますか?
‡-そして今、私はそれが知っていることを知っています。
これは、SameSiteCookieポリシーが ChromeのデフォルトはLax であるためです。つまり、ユーザーが表示できない限り、Cookieは送信されません。 iframeを除外するURL。
somesite.comを所有している場合は、SameSiteポリシーをNoneに設定してこのポリシーをオプトアウトし、実行することでCSRF攻撃のリスクに対処できます Double Submit Cookie 。
ネイティブajaxまたはjquery ajaxを使用する場合は、async:falseを削除します。それは私のために働いた。
古いブラウザーでの互換性をさらに高めるために、私は http://easyxdm.net/wp/ を使用することをお勧めします。 EasyXDMのアプローチは、ajax呼び出しを行うホストにHTMLファイルを配置する必要があるiframeハックを使用することです。そして、これは強制的に非同期になります、はい。しかし、このeasyXDMのいいところは、corsヘッダーを気にする必要がないことです。