在注册过程中在URL中维护“注册令牌”作为查询字符串参数是否安全/最佳做法

时间:2018-10-14 14:41:41

标签: angular http security web url

对于正在构建的网站,我有一个有角度的6 FE + ASP.NET Core后端应用程序-但是使用的技术对这个问题并不完全重要(我认为)。

我想知道在用户注册/登录网站时在URI中包含“注册”令牌作为字符串查询参数是否相当安全(主观我知道)。

该网站是幻想足球网站。有一个联盟经理可以邀请人们加入联盟(通过电子邮件发送邀请链接)。假设联盟名称为“紫色联赛1”

发送给人们的电子邮件链接如下:

https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789

例如,哪个发送给我的朋友:john@john.com

当在后端发送链接时创建连接令牌,并且该令牌与一封特定的电子邮件相关联,所有邮件都存储在数据库中并由后端Web API应用程序验证。令牌“ abcdef123456789”仅允许具有确切用户名“ john@john.com”的用户加入联盟“ Purple League 1”。

john@john.com可能会或可能不会在系统中注册一个帐户,因此在加入链接后,他将被重定向(Auth Route Guard)到登录页面,并使用toReturnUrl作为查询字符串参数:

https://fantasyleage1.com/login?toReturnUrl=https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789

(请注意,我没有在本文中对toReturnURL进行URL编码以使其更具可读性)

如果John在网站上已经有一个帐户,则他可以登录并加入联盟-很好。

但是,我的主要问题是:如果John没有帐户,他将不得不注册(/ login页面上有一个按钮可以重定向到/ register),如果注册链接保留了该url注册参数,因此例如访问URL的流程将如下所示:

https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789身份验证重定向->

https://fantasyleage1.com/login?toReturnUrl=https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789 John按下'Register',这将另一个toReturnUrl添加到'stack'->

https://fantasyleage1.com/register?toReturnUrl=https://fantasyleage1.com/login?toReturnUrl=https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789 John Registers使他回到最接近“堆栈”上的toReturnUrl->

https://fantasyleage1.com/login?toReturnUrl=https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789 John登录,并将他带到堆栈上的最终toReturnUrl->

https://fantasyleague1.com/joinexisting?jointoken=abcdef123456789->结束,我们现在来对地方了。

我看到其他网站没有遵循此路径,一旦用户必须注册一个新帐户,我已经看到其他网站只是将整个“忘记”到了ReturnUrl,而在用户注册后,他/她为此,只需点击电子邮件中的“加入”链接即可。这是出于安全性吗?还是编码努力?我不是很喜欢,似乎很浪费。

如果此方法正确或不正确,请提供反馈。

谢谢

0 个答案:

没有答案