我正在开发一个网络应用程序,它会向用户发送电子邮件通知以完成课程/教程。我添加了通过该电子邮件中的链接自动登录用户的功能。此功能已添加到 Internet 上的多个服务中,其中最著名的是 OkCupid。
这是我设置桌子的方式:
+----+-------------+-------------------+-----------+--------------+----------------------+
| id | key (22) | secret (40) | user_id | action | expires |
+----+-------------+-------------------+-----------+--------------+----------------------+
| 1 | IbQlQW8Dn...| hdC4dXQJUPA0... | 1 | lesson/14 | 2013-06-21 16:28:55 |
+----+-------------+-------------------+-----------+--------------+----------------------+
当用户通过电子邮件访问链接时,类似于:
http://example.com/go/IbQlQW8Dn8PNXJFFwHQxwh/hdC4dXQJUPA0pU7I6eUiXawbnobYv0iThA [ http://example.com/go/key
/ secret
]
服务器首先根据表中的日期检查 url 是否过期。如果它没有过期,用户将使用 自动登录,user_id
然后重定向到action
列中的给定 url。我为 url 使用了两个单独的值 ( key
& secret
) 只是为了增加安全性(防止 fusking)。
现在由于网站的性质(视频课程),安全性不是一个大问题,但我仍然想知道要考虑哪些最佳实践。
- 我应该限制链接的使用次数吗?
- 目前,我的链接在电子邮件发送后 60 小时(3 天)后过期。这个应该降低吗?
- 未经授权访问的两个明显风险包括有人转发电子邮件或有人获得对用户电子邮件帐户的访问权限。还有什么要考虑的吗?
感谢大家的见解,如果这应该移动到 StackExchange 的另一个部分,请告诉我。我知道我过去在这里看到过其他最佳实践帖子。