Actions
Backport(バックポート) #3149
closedメールアドレス変更時のトークンチェックが正しくおこなわれない
Start date:
2012-07-09
Due date:
% Done:
100%
Estimated time:
Description
Overview (現象)¶
メールアドレス変更時にメールで通知されるURL(/member/configComplete)に含まれるトークンのチェックが機能しておらず、任意のトークン(空の値を含む)で処理が続行されてしまう。
メールアドレス変更後のメールアドレスが正当なものであるか(メールアドレスが存在し、メンバー自身がメール内容を読むことができるか)のチェックが機能していないことになり、メンバーが自身の登録メールアドレス情報を任意の値に変更できてしまうことが考えられる。
一方、他のメンバーのメールアドレスについては、パスワードを知らない前提では変更することはできない。(このため本バグはセキュリティイシューとしていない。)
トークンチェックの機能が実装された 3.0 開発中の時点から報告時点の最新版である 3.8.0 まで、問題となる部分のソースコードは変更されていないため、OpenPNE 3 の全バージョンでこの現象が発生するものと予想される。
Causes (原因)¶
member/configComplete アクションでのトークンチェックのための条件式が間違っており、リクエストURLに含まれるトークンの値によらず次の行へ処理が続行されてしまっているのが原因。
該当部分
$this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue());
- 3.8.0 時点 https://github.com/openpne/OpenPNE3/blob/OpenPNE-3.8.0/lib/action/opMemberAction.class.php#L241
- 初期の開発時点 https://github.com/openpne/OpenPNE3/commit/49211457b4a2cf95e4c4c0313f375e9920216a86#L0R93
Way to fix (修正内容)¶
トークンチェックの条件式を正しいものに修正する。
3.6.4 ベースの修正パッチが以下になります。
--- a/lib/action/opMemberAction.class.php +++ b/lib/action/opMemberAction.class.php @@ -238,7 +238,7 @@ abstract class opMemberAction extends sfActions $memberConfig = Doctrine::getTable('MemberConfig')->retrieveByNameAndMemberId($type.'_token', $memberId); $this->forward404Unless($memberConfig); - $this->forward404Unless((bool)$request->getParameter('token') !== $memberConfig->getValue()); + $this->forward404Unless($request->getParameter('token') === $memberConfig->getValue()); $option = array('member' => $memberConfig->getMember()); $this->form = new opPasswordForm(array(), $option);
Updated by Rimpei Ogawa over 12 years ago
- Status changed from New(新規) to Pending Review(レビュー待ち)
- % Done changed from 0 to 50
更新履歴 4e6cc2c6f8f59293d82c7d7e0b170691532108e4 で適用されました。
Updated by Yuya Watanabe over 12 years ago
- Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
- % Done changed from 50 to 70
Updated by 開 石切山 over 12 years ago
- Status changed from Pending Testing(テスト待ち) to Fixed(完了)
- % Done changed from 70 to 100
Actions