Backport(バックポート) #4017
完了Bug(バグ) #4012: メールアドレス設定から意図的に他のメンバーと同じメールアドレスを設定できる
メールアドレス設定から意図的に他のメンバーと同じメールアドレスを設定できる
100%
説明
Overview (概要)¶
再現手順:
- メンバーA でログインし、PCメールアドレス設定 (/member/config?category=pcAddress) を開く
- PCメールアドレスに
hoge@example.com
を入力して「送信」ボタンをクリックhoge@example.com
宛に確認メールが届くが、この時点ではメールに記載されている URL を開かない
- メンバーB でログインし、PCメールアドレス設定 (/member/config?category=pcAddress) を開く
- PCメールアドレスに
hoge@example.com
を入力して「送信」ボタンをクリック - メンバーA によって送られた「メールアドレス変更ページのお知らせ」のメールに記載されている URL を開く
- メンバーA のパスワードを入力して「送信」ボタンをクリック
- メンバーB によって送られた「メールアドレス変更ページのお知らせ」のメールに記載されている URL を開く
- メンバーB のパスワードを入力して「送信」ボタンをクリック
- メンバーA, メンバーB のPCメールアドレスが同じ
hoge@example.com
に設定された状態になる
Causes (原因)¶
lib/config/config/member_config.yml
では pc_address および mobile_address に対して IsUnique: true
が指定されており、実際に「PCメールアドレス設定」のフォームでは MemberConfigForm::isUnique()
によって重複チェックが行われている。
しかし、メールアドレス変更については、変更後のメールアドレス宛に /member/configComplete?token=***
のURLをメールで送った上で、確認が完了するまでは pc_address を変更しないという例外的な対応を取っている。そのため、MemberConfigForm のバリデーション時には重複しなかったが /member/configComplete の時点で重複するような場合には対処できていなかった。
Way to fix (修正内容)¶
opMemberActions::executeConfigComplete()
において、pc_address_pre または mobile_address_pre を pc_address または mobile_address に変更する直前にも重複チェックを行う。これにより、上記の再現手順でいう手順 8 の段階でエラーが発生するようになる。
なお、手順 4 の段階で pc_address_pre が重複するためこの時点でエラーを発生させるといった修正も考えられるが、これをエラーとしてしまうと悪意のあるメンバーが任意のメールアドレスを確認が未完了のまま放置することによって他のメンバーがそのメールアドレスを使用できない状態に出来てしまうため、pc_address_pre に対する重複チェックは行わない。
Youichi Kimura さんが約8年前に更新
- 関連している Bug(バグ) #4012: メールアドレス設定から意図的に他のメンバーと同じメールアドレスを設定できる を追加
Youichi Kimura さんが約8年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
下記の Pull Request にて修正しました (#4015, #4017 の修正を含んでいます)
https://github.com/openpne/OpenPNE3/pull/374
isao sano さんが7年以上前に更新
- 関連している Backport(バックポート) #4015: メールアドレス変更処理が完了しても、仮登録用のデータ (***_pre, ***_token) が MemberConfig に残ってしまい、削除されない を追加
isao sano さんが6年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
https://github.com/openpne/OpenPNE3/pull/505 にてプルリクエストしました。
Rimpei Ogawa さんがほぼ6年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
親チケットでの指摘がこちらでは修正されていません
https://redmine.openpne.jp/issues/4012#note-13
Rimpei Ogawa さんがほぼ6年前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです。
Chiharu Nakajima さんがほぼ6年前に更新
- ステータス を Pending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
- 進捗率 を 70 から 80 に変更
動作確認OKです