2011-07-06 37 views
2

我正在构建一个网站,用户可以使用网站的消息系统(基本电子邮件系统)创建帐户并互相发送消息。如果用户A收到来自其他用户B的消息,我想通过他/她的电子邮件地址自动通知用户A.此外,我想保存用户A不必输入他/她的登录凭据到网站以访问此消息。安全风险:通过GET参数自动登录

给User-A发送一封特殊的链接,并在网站上自动登录他/她是不是一个好主意?例如:“请点击www.domain.com/?message_id=1 & hash = abc123”(我可以使用has值自动将用户A登录到他/她的帐户并查看特定消息)。

该电子邮件已经包含用户B发送的消息。用户A必须前往该网站才能回复。

我想我的假设是,这个链接是安全的,因为它会直接发送给用户A,他/她应该有他/她的电子邮件安全。此外,我可以使散列只工作一段时间或第一次点击后等。

+0

请记住,电子邮件通常是以纯文本形式发送的,因此您绝对不能将任何放入电子邮件中的内容视为“安全”。 –

+0

您对Flimzy的建议有什么看法?它需要cookies。 – StackOverflowNewbie

+0

我同意如果您尚未登录(使用适当的cookie),让哈希URL将您指向一次性登录页面的想法。这样,如果有人从电子邮件的链接中发现了恶意,那么他们无法使用它在没有有效的登录cookie(或用户名/密码)的情况下登录。当然,为了保证安全,您需要让所有流量都通过https://,否则cookie也会在网络上解密(并且可能会以与电子邮件相同的方式被盗取)。 –

回答

2

这种事情的正常做法是有一个一次性授权页,用户被带到第一次点击其中一个链接。此授权页面要求用户输入完整凭证(用户名,密码等),并询问他们是否从可信/永久计算机连接。如果他们回答是,那么它会在浏览器中存储一个cookie,以便您的应用程序在将来的访问中知道浏览器已被验证属于该用户。

在内部,您需要存储该Cookie的ID和用户的ID,以便您可以在返回访问时验证该Cookie与用户匹配。

您也可能希望通过注册过程向用户注册的电子邮件地址发送另一封电子邮件,并附带一个必须用于注册其浏览器的魔术令牌。这可以防止第三方窃取他们的电子邮件并猜测他们的密码。当然,它不能防止攻击者访问他们的邮箱。