【PHP】session_set_cookie_params関数でセッションクッキーを安全な設定にする

セッションクッキーを安全な設定にする

PHPで実行時にセッションクッキーの設定を変更する事が出来る、session_set_cookie_params関数の使い方をメモします。

セッションクッキーを利用する際は
ユーザーのなりすましなどの危険性がある、セッションIDの漏洩を防ぐための設定を行うことが推奨されます。

環境:PHP 7.4.4、 Google Chrome バージョン: 83.0.4103.116

session_set_cookie_params関数

session_set_cookie_params関数で設定出来る各項目は以下のようになっています。

lifetime (第1引数)
ブラウザに保存したセッションクッキーの有効期間(秒)

デフォルトの0はブラウザを閉じるまでが有効期間(推奨)

path (第2引数)
セッションクッキーが有効となるドメインのパス

デフォルトは /(ドメイン配下すべてのパス)
ディレクトリパスごとにセッションIDを分ける事が出来ます。
(こちらはセキュリティに関する項目ではありません)

domain (第3引数)
ブラウザからセッションクッキーを送信するドメイン

指定なし(デフォルト & 推奨)
クッキー生成(セッションを開始)したドメインにのみセッションクッキーを送信
【例】 サブドメイン「sub1.example.com」を指定…
値に指定したサブドメインにのみセッションクッキーを送信 (親ドメイン、他の兄弟サブドメインには送信しない)
【例】 親ドメイン「example.com」を指定…
親ドメインと、そのサブドメインにセッションクッキーを送信

こちらに値として指定できるのは仕様としてサーバーに関連付られたドメインのみではありますが
例えば、同一サーバ上の複数のサブドメインで異なるWebサイトを分けている場合など
いずれかのサブドメイン上のサイトで不用意に親ドメインを指定した場合、他のサイトへもクッキー(セッションIDを含む)が漏洩することになるため、通常は設定しない事が推奨されます。

secure (第4引数)
セキュア(安全)な通信時のみセッションクッキーをブラウザへ送信する
有効にするとSSL(https)通信時のみセッションクッキーを保存する(推奨)。
(詳細リンクを後述)
httponly (第5引数)
(有効を推奨)
セッションクッキーへのアクセスをHTTP(S)のみにする
有効にする事でJavaScriptによる操作を不可にし、XSS(クロスサイトスクリプティング)など不正な手段でセッションIDを盗まれる危険を防ぐ。
※ 古いものなどブラウザによってはこちらの設定に対応していない場合があります。

上記に該当するphp.iniの設定項目はそれぞれ以下となります。

session.cookie_lifetime
session.cookie_path
session.cookie_domain
session.cookie_secure
session.cookie_httponly

【PHP】セッションクッキーの使用をSSL(https)通信時のみに限定する

推奨パラメータで関数を実行する

各項目の安全な推奨値を引数にして実行する。
※セッション開始前に実行する(session_start)

<?php

session_set_cookie_params(0, '', '', true, true);

session_start();
  • lifetimeを0とし、セッションクッキーがブラウザ終了時に破棄されるようにする
  • ドメインの指定は行わない(空文字指定)
  • secure属性、httponly属性を有効にする

(補足)セッションクッキーの設定値を確認する

セッションクッキーの設定値はsession_get_cookie_params関数で取得する事が出来ます。

<?php
var_dump(session_get_cookie_params());

  ["lifetime"]=>
  int(0)
  ["path"]=>
  string(1) "/"
  ["domain"]=>
  string(0) ""
  ["secure"]=>
  bool(false)
  ["httponly"]=>
  bool(false)

Follow me!

【PHP】session_set_cookie_params関数でセッションクッキーを安全な設定にする” に対して1件のコメントがあります。

コメントは受け付けていません。