勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでCookie保存時にHttpOnly / Secure属性を設定する方法

  PHP

あるシステムのセキュリティ対策として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

  関連記事

MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法

phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...

PHP5.4系でAPCが上手く動かなかったので5.5にアップデート&Zend OPcache導入

PHP5.3系から5.4系にアップデートしてから、WordPressがちょっと重 ...

PHPで数字のプラスとマイナスを反転させる方法

PHPのプログラム内で数値のプラスとマイナスを反転させたい。以下に対応方法をメモ ...

PHP8系からは文字列検索はstrposよりstr_containsが良さそう

PHP8.0のアップデートに関する記事を読んでいたところstr_contains ...

PhpSpreadsheetでExcelファイルを読み込みPHPの配列として取り扱う方法

formからCSVファイルをアップロードし、PHPの配列に格納後、データベース登 ...