misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.1k stars 1.38k forks source link

アカウント登録後、メール認証する前に他の人が同じユーザー名でアカウント登録しようとするとできてしまう #11145

Open kabo2468 opened 1 year ago

kabo2468 commented 1 year ago

💡 Summary

UserPendingのusernameがuniqueじゃないのと、signup時に確認してない。

🥰 Expected Behavior

Pendingなら他の人は登録できない。

🤬 Actual Behavior

usernameを横取りできてしまう。

📝 Steps to Reproduce

0.メールアドレス必須のサーバーである。 1.誰かがアカウント登録しようとする。 2.他の誰かが同じユーザー名でアカウント登録し、メール認証まで完了させる。 3.最初の人はそのユーザー名で登録完了できない。

📌 Environment

💻 Frontend

syuilo commented 1 year ago

これで正しい気がする

syuilo commented 1 year ago

例えば存在しないメールアドレスとか入力すればユーザー名確保し放題みたいになりそう

syuilo commented 1 year ago

少なくともメールアドレスの確認が終わるまではユーザー名は使用されてないから「使用されています」エラーを返すのはおかしい気がする

u1-liquid commented 1 year ago

少なくともメールアドレスの確認が終わるまではユーザー名は使用されてないから「使用されています」エラーを返すのはおかしい気がする

使用されようとしたのは事実かも

悪意のないユーザーたちがたまたま同じidで登録しようとした時登録の最終段階でただただ「問題が発生しました」とエラーが出るだけなのでOOBE的によくないと思う しかも、招待制のサーバーの場合招待コードが消費されてしまうため、登録を諦めてしまう可能性が高くなっちゃう

確保し放題の問題については、 メアド認証がrequiredの場合は登録が完了されてないpendingは一定時間後にexpireするようになると解決できる requiredではない場合は元から確保し放題なので問題なさそう

kabo2468 commented 1 year ago

アカウント登録完了するまでユーザー名が使用できることを保証するべきだと思う

一番いいのはメール必須だからメール認証してからアカウントを登録させること でもこれはマイグレーションが必要になりそうなのですぐにはできないかも

すぐできるのは

メアド認証がrequiredの場合は登録が完了されてないpendingは一定時間後にexpireするようになると解決できる

みたいに例えば「24時間以内にメール認証して下さい」とかで無効にしていくのがいいかもしれない