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を設定したクッキーを発行すると、古いクッキーは上書きされてしまいます。
予想しない動きをするかもしれないので、注意が必要です。

コメント