HOME > Topics > 【Chrome80問題】PHPでcookieにSecure属性とsamesite=None を設定する方法(PHP7.3でなくてもOK)
2020年2月11日

【Chrome80問題】PHPでcookieにSecure属性とsamesite=None を設定する方法(PHP7.3でなくてもOK)

chrome80 cookie
たまにはマジメな話

こんにちワニ、放談の時間です。

NFLと無関係な話ですが、今日は世間を騒がせている問題に取り組みたいと思います。

[SPONSORED LINK]

Google Chrome (グーグルクローム) 80問題とは?

まず何が世間を騒がせているかを説明しますと、天下のGoogleさんが

「Google Chrome80から、ドメインが違うサイトとはクッキーを使ったやり取りができなくなるよん」

というお達しを出したのです。

つまり、ブラウザのセキュリティを強化することで、悪質な攻撃からユーザーを守るという事なのです。

 

しかし、問題なのが既にクッキーを使って違うドメインで情報を受け渡しを行っているサイトが世間に山ほどあること。

Chrome80にバージョンUPしても、すぐにこのセキュリティ強化の設定にはならず、一部のユーザーから徐々に広めていく計画のようですが、いずれは全てのChromeで普通では異なるサイトどうしでクッキーの受け渡しができなくなります。

 

この話、かなり前に発表されたのですが、施行される直前になってどれだけヤバイ事かに世間が気づいて、一部で混乱を生んでいます。

実際、PHPではどうするのよ?

詳しい話は他のサイトで解説してるので割愛し、みんな直球で知りたいのは、どうやって対応するかでしょう。

PHPかつsetcookieでsamesite属性をつけるプロパティが無いPHP7.2以下やPHP5.X でやるならば、ずばり答えはこうだと思います。

 

$resHttps = isset($_SERVER['HTTPS'])? $_SERVER['HTTPS'] : NULL;
//$resHttpsInt = 0;
$resHttpsStr = "";
$resSamesite = "";
if($resHttps){
//$resHttpsInt = 1;
$resHttpsStr = "Secure";
$resSamesite = ";samesite=None";
}
setcookie("test2","abcdefrg", time() + 3600*24, "/".$resSamesite ,"",$resHttpsInt);
setcookie("test3","abcdefrg", 0, "/".$resSamesite ,"",$resHttpsInt);
//header("Set-Cookie: testHeader=abc; path=/; SameSite=None; ".$resHttpsStr); //headerだと先に送信したcookieを上書く

 

上記の例では、cookie名「COOKIEID」に値「abc」を設定しています。

まず、SSLが効かないローカル環境でもcookieを効かすために、環境がHTTPSであるかどうか判断。HTTPSであれば、「samesite=None」と「Secure」 Cookieをセットします。

一部のサイトでheader関数を使う事を書いていましたが、header(Set-cookie)だと前に書いたcookieを全消しするようです。

 

さぁ、これで大丈夫。(だと思う)

ちなみに質問は受け付けませんので、あしからず。

m(_  _)m

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

CAPTCHA


Top