0

我希望我的网站有一个方面,用户可以使用它来注册时事通讯。

我不是 100% 完成这项任务的最佳方法是什么。

我能想到的很简单:


一个带有提交按钮的输入,用户在那里输入他们的电子邮件地址。

生成一个随机的 32 个字符散列,并将其与它们的地址一起存储在 mysql 表中。

Am 电子邮件被发送到包含哈希的地址,并要求用户在页面上输入他们的电子邮件地址和哈希,以对照 mysql 表检查它。

如果正确,则通过在表格上定义一个附加条目来激活电子邮件。


就我对这两者的了解而言,这大约是...

我想要完成的是,在确认中向用户发送一个链接,他们可以单击该链接来确认他们的地址......类似于http://www.mysite.com/users/newsletter/?user=aGuy&confirm=blahBlah.

但我真的不知道从哪里开始这样的事情......据我所知,以这种方式允许mysql查询是不安全的......

有人可以向我提供有关此问题的更多信息吗?

这是以建议或指向可能涵盖此类内容的教程的链接的形式出现的。

感谢您抽出时间来阅读!!

4

2 回答 2

3

你很近。

当用户提交他的电子邮件地址时,将其插入数据库。该表至少应包含 4 个字段(id、email、verified、key)。这id只是一个代理键(自动增量)。verified应该默认为 false,并且密钥不应该是真正的散列,而是随机生成的字符串——任何难以猜测的东西。哈希是确定性的,因此如果有人弄清楚您使用的是什么算法,使用 md5 对用户的电子邮件地址进行哈希处理不会成为一个好的密钥。随机元素更适合,但同样,任何难以猜测的东西都可以正常使用。

电子邮件应包含一个包含id和的链接key。您使用id查找数据库中的记录(因为它是唯一的),然后检查keyURL 中的 是否与存储在数据库中的记录匹配(键不必是唯一的)。如果它们匹配,则设置verified为 true,然后瞧。

对于奖励积分,您可以存储发送验证电子邮件的日期,并且可以在 24 小时左右后删除未验证的电子邮件。

于 2012-05-16T23:31:24.853 回答
1

您对流程的描述很好,只需开始实施它。

sfGuard实现了类似的流程,查看它们的源代码和数据库设计。

于 2012-05-16T23:29:59.230 回答