我正在建立一个为用户提供功能而不需要他们注册的网站。我们的想法是将电子邮件发送到包含带有令牌的链接的指定地址。这样,用户可以在他们想要对功能进行更改时随时链接。
虽然我意识到没有办法真正保护这样一个概念,但我正在寻找最小化令牌可见性的选项。在当前状态下,用户点击链接后会立即将其添加到其浏览器历史记录中,任何有权访问该计算机的人都可以使用该链接。
在大多数情况下,我会用一个简单的表单来解决这个问题,以便可以通过POST请求传递令牌,但电子邮件中并不真正支持表单。
所以问题是,有没有人知道在这样的电子邮件中隐藏令牌的另一种方法?
答案 0 :(得分:0)
我确定您已经想到了这一点,但您可以向他们发送密码和指向他们需要输入该密码的URL的链接。如果通过电子邮件发送的URL包含另一个密码,那么将用户输入的密码设置得非常短,比起通常的安全性更小,例如PIN码。
答案 1 :(得分:0)
每次用户想要登录时,您都可以重新发送新令牌。让他们在他们的电子邮件地址中输入并向他们发送新令牌,同时将之前的令牌设置为“已过期”。或者,如果服务器检测到使用了旧的链接/令牌,它可以自动将新的链接/令牌发送到关联的电子邮件地址,并要求用户检查他们的电子邮件是否有新的链接。
这需要跟踪旧的,过期的令牌和相关的电子邮件地址,但仍然不需要注册 - 只是用户每次想要登录时都要检查他们的邮件。你基本上是在他们的电子邮件上备份认证
对于用户来说,这也是违反直觉的。
这会将令牌转换为cryptographic nonce,主要用于防止您提到的重播攻击。
答案 2 :(得分:0)
另一个答案,也许更有用:
某些浏览器(如Chrome)不会在浏览器历史记录中记录301“永久移动”重定向。 Firefox确实如此,但有一项建议要改变: https://wiki.mozilla.org/Browser_History:Redirects
例如,在Chrome中,如果您直接导航到
amazon.com
它将遵循301重定向到
www.amazon.com
如果您检查浏览器历史记录,则只会显示
www.amazon.com
因此,如果您的服务器从登录链接返回301重定向,则服务器可以记录该令牌,将其从重定向链接中删除,并且用户的浏览器将仅记录重定向链接。
(这是我第一次回复堆栈溢出 - 让我知道我的写作是否不清楚,或者我是否遗漏了其他礼仪)