未经许可,不得转载。
背景
目标应用允许用户创建项目。这些项目中包含多个用户角色,每个角色权限不同(如所有者、管理员、成员管理者等)。用户可通过接受邀请来加入项目,而只有项目所有者才能通过输入邮箱将项目所有权转移给其他用户。这是你需要了解的所有背景信息。
正文
在探索应用时,我发现了两种转移项目所有权的方式:
1、目标用户A尚未加入项目,向A转移项目所有权时,会发送邀请,用户A接受邀请后才能获得项目所有权。
2、目标用户A已经是该项目成员时,所有权会立即转移到A。
很有意思,对吧?但该如何利用这种行为呢?毕竟,只有项目所有者才能发起转移操作。
在测试过程中,我注意到以下几点:
1、可以通过拦截编辑成员权限的请求,并在请求体中添加 email 参数,来修改待定邀请用户的邮箱。
2、已激活用户的邮箱:在任何情况下都无法修改。
待定用户的邮箱究竟在什么时候变得不可更改?是在点击邀请链接后?还是注册完成后?亦或是在登录并接受邀请后?
通过大量测试和账户创建,我发现了转折点:受邀用户的邮箱在接受邀请并从“待定”状态切换为“激活”状态后才会变为不可更改。
设置竞态条件
有趣的部分来了:如果我在接受邀请的同时修改受邀用户的邮箱会发生什么?
为了测试这一点,我采取了以下步骤:
1、向一个新邮箱发送邀请。
2、打开邀请链接并开始创建账户,但停留在接受表单界面。
订阅专栏 解锁全文
224





