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でcURLを用いて配列のデータをJSON形式でPOST送信及び受信する方法
PHPで配列データを別サーバにJSON形式でPOST送信し、別サーバ側でもPHP ...
-
-
CodeIgniter4でのメール送信方法(テキスト・HTMLメール)
CodeIgniter4.4.4でテキストメール及びHTMLメールを送信したい。 ...
-
-
レンタルサーバでPHPのsystem関数やexec関数が使用できずにエラーが出力される
レンタルサーバ上でPHPのsystem関数を実行しようとすると「Fatal er ...
-
-
PHPとajaxでチャットの作成
■ソース ・index.php <? error_reporting(E_ ...
-
-
ブラウザから動画ファイル名を確認できないようにPHPで動画を出力する方法
Webページ上で動画ファイルを再生したい場合、通常だとブラウザのソースコード上に ...