【cookie】setcookieのHttpOnlyとは

phpでクッキーを設定する場合、一般的には↓のようになります。

setcookie('name', 'value', time() + 3600);

オプションは
第一引数:クッキー名
第二引数:クッキーの値
第三引数:有効期限(タイムスタンプ)
第四引数:パス
第五引数:ドメイン
第六引数:セキュア(https通信時のみクッキーを送信するかどうか)
第七引数:HttpOnly

となります。

この中でHttpOnlyとは、JavaScriptなどのクライアントサイドのスクリプトから
クッキーにアクセスできないようにするためのオプションです。
これにより、クロスサイトスクリプティング(XSS)攻撃からクッキーを保護することができます。

ちなみに、HttpOnlyを設定しない場合はデフォルトでfalseとなります。

例:

setcookie('name', 'value', time() + 3600, '/', 'example.com', true, true);

上記の例では、HttpOnlyがtrueに設定されているため、JavaScriptからクッキーにアクセスできなくなります。

まとめると、HttpOnlyオプションを使用することで、クッキーのセキュリティを向上させることができます。

●もしサイト内で複数個所でクッキーを設定していて、HttpOnlyを設定無しにして、
その後に有りのクッキーを発行したらどうなる?

例:

<?php
setcookie('name', 'value1', time() + 3600);
setcookie('name', 'value2', time() + 3600, '/', 'localhost', true, true); // HttpOnly有り

var_dump($_COOKIE);
?

こう設定した場合、実際のクッキーはどうなるか
ちなみにドメインはlocalhostです
「HttpOnly」はtrueになります。

2回目に同じ名前のクッキーを発行すると、上書きされます。
そのため、最終的にブラウザに保存されるクッキーは
name=value2; HttpOnly=true
となります。

古いサイトだと、HttpOnlyを設定していないクッキーが多く存在する場合があります。

その場合、新たにHttpOnlyを設定したクッキーを発行すると、古いクッキーは上書きされてしまいます。

予想しない動きをするかもしれないので、注意が必要です。

コメント