PHPでCookie保存時にHttpOnly / Secure属性を設定する方法
あるシステムのセキュリティ対策としてCookie保存時にHttpOnly / Secure属性を設定してほしいと要望を受けた。ただ、どちらの属性についても設定したらどうなるのか等、詳細はよく分かっていない。そのためPHPでの設定方法及び各属性についての詳細を以下にメモ。
設定方法
第6引数がSecure属性、第7引数がHttpOnly属性になる。詳細はマニュアル参照。
setcookie('test_key', 'test_val', time()+3600, '/', 'test.com', true, true);
尚、PHP7.3以降の場合は以下のような記述方法も可。
$cookie_options = array(
'expires' => time() + 3600,
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
);
setcookie('test_key', 'test_val', $cookie_options);
HttpOnly属性について
HTTPを通してのみCookieにアクセスできるようになり、JavaScriptからはアクセスできなくなる。
Secure属性
HTTPS接続時のみCookieが送信されるようになる。尚、Secure属性をつけている場合、HTTP接続時はCookieの保存もできなかった。
所感
現状大抵のサイトはHTTPS接続可の環境なのでSecure属性の方は問題無さそうだけど、HttpOnly属性の方は「JavaScriptからはアクセスできなくなる」というのがかなり気になるところ。
例えばログイン不要のサイトでお気に入り機能みたいなものを作成する場合、お気に入りに登録したかどうかはCookieに保存することが多い。そのような場合、PHPからもJavaScriptからもCookieを読み込みたいといった状況になるが、その辺りで困ったことになりそう。
関連記事
-
-
PHP Qr Codeライブラリを使用してQRコードを生成する方法
PHPでQRコードを生成したい。大分前にGoogle Chart APIを用いて ...
-
-
Mailtrap & PHPMailerでメールサーバ無しの環境でもメール送信テストを行う方法
開発環境等メールサーバが無い環境でメール送信テストを行う際にMailtrapとい ...
-
-
PHPでステータスコードを取得する方法
サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視して ...
-
-
Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...
-
-
CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法
CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...