勉強したことのメモ

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

  関連記事

PHPでファイルをダウンロードさせる
PHPでファイルをダウンロードさせる

集計ページみたいなんがあった。その集計ページを CSV化したいと言われた。 ■ソ ...

PHP-FPMのプロセス設定を行いサーバのメモリ消費を抑える方法
PHP-FPMのプロセス設定を行いサーバのメモリ消費を抑える方法

CentOS7からAlmaLlinux8に移行してから微妙にサーバのレスポンスが ...

MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法
MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法

MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...

GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法
GoogleスプレッドシートとPHPを連携させデータを取得・追記する方法

GoogleスプレッドシートとPHPプログラムを連携させたいという案件をたまに見 ...

Cookieをできるだけ長い期間保存する方法
Cookieをできるだけ長い期間保存する方法

あるシステムの中でCookieを可能な限り長い期間保存したいというリクエストを受 ...