我正在为ASP.NET的会员系统中新创建的用户创建激活表单。创建用户后,我会发送一封电子邮件,其中包含指向激活页面的链接。但是,在激活用户之前,我想验证他们的用户名和密码,所以我让他们在文本框中输入他们的凭据。
然而,基于我所阅读的内容和我所看到的行为,似乎我必须在使用FormsAuthentication.Authenticate或Membership.ValidateUser测试密码之前激活用户。我认为这是一个潜在的安全漏洞 - 它有什么办法吗?
谢谢,
格雷厄姆
答案 0 :(得分:0)
其电子邮件中的激活链接应包含一个长(例如32个字符)唯一和随机ID,例如GUID,一旦激活就会过期(如果未激活,也会在短时间内到期)。该ID可能是可能猜到的,但如果您认为可以猜到,那么用户选择的用户名和密码就会在GUID之前几年被猜到。
另一方面,如果您真的想以另一种方式进行操作,请向他们发送激活“代码”,将其重定向到您网站上的激活页面,询问用户名,密码和激活码。在后端,激活帐户,然后检查用户/通行证有效性,如果无效,则禁用该帐户。否则,重定向他们让他们知道他们的帐户被激活。所有这些都是在“原子”过程中完成的。