* Sessionを利用したForm認証 [#xdced4f0] - ページ: [[BugTrack2]] - 投稿者: [[umorigu]] - 優先順位: 低 - 状態: 完了 - カテゴリー: 本体新機能 - 投稿日: 2016-01-21 (木) 01:41:51 - バージョン: 1.5.0 - リリース予定バージョン: 1.5.1 ** メッセージ [#s4122278] v1.5.0及び標準状態の認証方法はBasic認証のみである。認証方式の拡張性を高めるため、ユーザー名・パスワードをHTML Formで入力するForm認証を導入する。 一度ユーザー名・パスワードでログインした後は、Sessionによってその状態を維持する。 ** Sessionについて [#e00a207c] - [[php.net:manual/ja/book.session.php]] ** 動作仕様の変更 [#h42b2786] 1.5.0のBasic認証の場合、ログイン状態(有効なユーザー名・パスワードの組み合わせを送信したリクエストの処理中)であっても、そのユーザーのアクセス権のないリソースへのアクセスが必要になったタイミングで 403 Forbidden を返していた。ブラウザ上では認証情報を再入力するダイアログが表示される。 こうなるとBasic認証サインイン状態が解除されてしまう(アクセス権があったリソースへのアクセスも、再度パスワードの入力が必要になる) また、Form認証では原理上同じ動作はできないため、この部分の動作を次のように変更する。 Basic認証の場合でも、有効ユーザー名・パスワードの組み合わせが送信されていれば、そのユーザーでのログイン状態を維持し、403 Forbiddenを返すことをしない。そのユーザーでのアクセス権限の無いリソースへアクセスした場合には「アクセス権がない」旨の表示を行う。 **セキュリティの考慮 [#i5452f18] Basic認証ではリクエスト毎にユーザー名とパスワードが送信されるが、Sessionによるログイン状態の保持であればパスワードの送信は一度きりとなる。 Form認証であってもログイン状態でサイト上でできることは変わらないため、ブラウザとSessionを結びつけるキー(PHP session ID)はパスワードと同程度に秘匿する必要がある。セッションハイジャック等の攻撃に注意する。 *** 対応 [#u36bad7a] 実行時設定 [[php.net:manual/ja/session.configuration.php]] ini_set('session.use_strict_mode', 1); ini_set('session.use_cookies', 1); ini_set('session.use_only_cookies', 1); $_SESSIONの扱い - ログイン時に session_regenerate_id(true) - ログアウト時に session_regenerate_id(true), $_SESSION = array(), session_destroy() session_regenerate_id(true)を利用するため、session機能を使う場合は PHP5.1以降での動作が必要、とする。 ** 実装済みの仕様(2016-01-21) [#zce97e58] pukiwiki.ini.php にて $auth_type = AUTH_TYPE_FORM; -------- - 機能的には[[pukiwiki:自作プラグイン/login.inc.php]]とほぼ同じ -- [[umorigu]] &new{2016-01-21 (木) 01:45:35}; - 対応しました [[branch_r1_5>osdn.jp:projects/pukiwiki/scm/git/pukiwiki/commits?branch=branch_r1_5]] -- [[umorigu]] &new{2016-01-21 (木) 05:58:32}; #comment