更新日:
Cookie利用時のセキュリティ対策
大事なことなのでセキュティ内容を追加。 Cookieのセキュリティまとめ Cookie の性質を利用した攻撃と Same Site Cookie の効果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>