Cookie保存と呼出のセキュア部分に関するSameSite属性の設定について

PHPのCookieについて PHP/MySQL

Cookieの動作に関わるCookieのSameSite属性について保存や呼び出しの注意点

webサイトでよく使われるCookieについての基準が、変更したのでクロスサイトの場合は変更が必要。

WEBサイトに別ドメインのサービス(カートシステムや決済サービスページ、ブログサービス)を利用している場合は注意する。利用するドメインが1つだけの場合は問題ない。 SameSite属性指定がない場合は、SameSite属性の既定値は「Lax」として取り扱われれる。(SameSite=Lax) CSRF(cross-site request forgeries:クロスサイトリクエストフォージェリ)攻撃とは、第三者がCookieを悪用して、ユーザーの意図しない処理や不正アクセスなどを行うこと。 SameSite属性は、CSRF攻撃からユーザーを守るために、Cookieに付与される属性。 Chromeブラウザでは、SameSite属性の既定値がNoneからLaxに変更された。 そのため、SameSite属性が未指定の場合、ChromeからのアクセスはCookieが取得できなくなることが起きる。

CookieのSameSite属性の3つの値(None/Lax/Strict)

クロスサイトでのCookie受け渡しが可能 動作条件 1)SSL化(https接続)されている 2)CookieにSecure属性が付与されている 2つの条件が合えば、ドメイン名が異なる複数サイト間(クロスサイト)でCookieを利用しても動作する
Lax ドメイン名が異なる複数サイト間(クロスサイト)でCookieデータの受け渡しが制限。 クロスサイトでCookieを利用した場合に$_POSTの配列データの一部をロストすることがある。
Strict ドメイン名が異なる複数サイト間(クロスサイト)の場合、ドメインが異なるとCookieがいっさいサーバーに送られない。

クロスサイトではないなら「Strict」を記述

ドメインを移動することが無いなら、CookieのSameSite属性は「Strict」を記述がいい。
更新日:

CORS (Cross-Origin Resource Sharing)制約を一部解除する

Googleなど外部サービスのCookiがブロックされている

GoogleのサービスでもCookieの一部がブロックされています。 CORS 対策について詳しいサイトがあったので参考に。 参考:とほほのWWW入門

PHP


<script>
window.onload = function() {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            console.log("status = " + xhr.status);
            console.log(xhr.responseText);
        }
    }
    xhr.open("POST", "http://site-b.example.com/");
    xhr.withCredentials = true;
    xhr.setRequestHeader("Content-Type" , "text/json");
    xhr.send(JSON.stringify({"sid": getCookie("sid")}));
}
</script>
タイトルとURLをコピーしました