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での$_REQUESTは色々危険
extract($_REQUEST)はかなり怖いよ、という話が最近あった。 でき ...
-
-
レンタルサーバでPHPのsystem関数やexec関数が使用できずにエラーが出力される
レンタルサーバ上でPHPのsystem関数を実行しようとすると「Fatal er ...
-
-
PHPでjpg / png画像をWebP画像に変換し保存する方法
PHPでjpg / png画像を圧縮したかった。ただjpg / pngのままだと ...
-
-
PHP8系で関数の引数が設定しやすくなる名前付き引数について
PHP8系で名前付き引数が導入されたということを最近知った。今までは「第〇引数」 ...
-
-
PHPのセッションでログイン、ログアウトの管理。あとセッションが保存されない場合の対処。
セッションはほとんど使ったことがなく、 色々つまづいたのでメモ。 やりたかった事 ...