0

我正在构建一个无需注册即可为用户提供功能的网站。这个想法是向指定的地址发送一封电子邮件,其中包含带有令牌的链接。这样,用户可以随时更改此链接以更改功能。

虽然我意识到没有办法真正保护这样的概念,但我正在寻找最小化令牌可见性的选项。在当前状态下,只要用户单击链接,它就会添加到他们的浏览器历史记录中,任何有权访问计算机的人都可以使用。

在大多数情况下,我会用一个简单的表单来解决这个问题,以便可以通过 POST 请求传递令牌,但电子邮件中并不真正支持表单。

所以问题是,有没有人知道在这样的电子邮件中隐藏令牌的另一种方法?

4

3 回答 3

0

我相信您已经想到了这一点,但您可以向他们发送密码和指向他们需要输入密码的 URL 的链接。如果通过电子邮件发送的 URL 包含另一个密码,那么将用户输入的密码设置为非常短的密码(例如 PIN 码)对安全性的影响会比平时更小。

于 2009-11-06T04:18:45.203 回答
0

每次用户想要登录时,您都可以重新发送一个新令牌。让他们输入他们的电子邮件地址并向他们发送一个新令牌,同时将以前的令牌设置为“过期”。或者,如果服务器检测到使用了旧链接/令牌,它可以自动向关联的电子邮件地址发送一个新链接/令牌,并要求用户检查他们的电子邮件以获取新链接。

这将需要跟踪旧的、过期的令牌和相关的电子邮件地址,但仍然不需要注册——只是用户每次想要登录时都会检查他们的邮件。你基本上是在支持他们的电子邮件身份验证。

这对用户来说也是违反直觉的。

这会将令牌变成加密随机数,主要用于防止您提到的重放攻击。

于 2009-11-06T06:19:42.447 回答
0

另一个答案,也许更有用:

某些浏览器(如 Chrome)不会在浏览器历史记录中记录 301“永久移动”重定向。Firefox 确实如此,但有一个改变它的提议: https ://wiki.mozilla.org/Browser_History:Redirects

例如,在 Chrome 中,如果您直接导航到

亚马逊网站

它将遵循 301 重定向到

www.amazon.com

如果您随后检查浏览器历史记录,它只会显示

www.amazon.com

因此,如果您的服务器从登录链接返回 301 重定向,则服务器可以记录令牌,将其从重定向链接中删除,并且用户的浏览器将只记录重定向链接。

(这是我第一次回应堆栈溢出 - 如果我的写作不清楚或者我是否缺少其他礼仪,请告诉我)

于 2009-11-06T06:39:21.457 回答