勉強したことのメモ

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から他サーバのAPIに対してPOST送信する方法
PHPから他サーバのAPIに対してPOST送信する方法

PHPから他サーバのAPIに対してPOSTでリクエストしたかった。GETだったら ...

CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法
CodeIgniter4.4.4のインストールからHello Worldページ表示まで行う方法

以前CodeIgniter3を勉強したことがあったが新バージョンの4系がリリース ...

ディレクトリに設置してあるフォルダをPHPで調べて表示
ディレクトリに設置してあるフォルダをPHPで調べて表示

やりたい事はsampleというディレクトリがあったとして、その直下にあるフォルダ ...

PHPにて指定した期間内のランダムな日付をn件生成し、日付順にソートした上で受け取る方法
PHPにて指定した期間内のランダムな日付をn件生成し、日付順にソートした上で受け取る方法

PHPにて指定した期間内のランダムな日付を指定した数だけ生成し、さらに日付順にソ ...

PHP8系で「Uncaught TypeError: count(): Argument」エラーの対応方法
PHP8系で「Uncaught TypeError: count(): Argument」エラーの対応方法

PHP8系で「PHP Fatal error: Uncaught TypeErr ...