java - 验证 'confirm' 电子邮件链接的防篡改方法以及预防篡改措施?

标签 java activation

背景故事: 我的网站上运行着一个电子请愿类型的服务,我通过电子邮件向人们发送一个链接,他们可以在其中“同意”请愿书。此链接仅包含发送者的“petitionID”和“用户名”。

这些信息并不是特别敏感,但我仍然要求它是防篡改的,因为我希望他们能够在不登录或在数据库中存储值的情况下接受。

我想到使用Java的String.hashCode()函数。

也许 URL 为:用户名、PetitionId,然后是哈希

www.website.com/accept.jsp?user='username'&id='petid'&token='1039678106'

token 可以由用户名 + id(来自链接)+ datePetitionStarted(如未在网址中公开的盐)组成,如下所示:

String test = "mike.Who@petitionwebsite.com+1524+09/02/2016";
        System.out.println(test.hashCode());

这会给我一个哈希值“1039678106”,这意味着服务器端,我可以获取 ID 参数、该人的用户名并使用 datePetitionStarted,获取哈希码并比较它们。

您认为这是防止篡改的有效方法吗?

我真的很想要一种接受请愿的 token 类型的方法,所以如果有人有任何其他想法那就太棒了。

谢谢

迈克

最佳答案

这就是我所做的(实际上是防篡改的)。我不使用java脚本,因为用户无论如何都可以禁用它。我只需创建一个 UUID(存储在用户详细信息旁边的数据库中),然后创建一个在注册过程中通过电子邮件发送的链接。

http://my_domain_name/Activate?key=6faeecf5-9ab3-46f4-9785-321a5bbe2ace

当用户单击上面的链接时,服务器端代码会检查该 key 是否确实存在于数据库中,在这种情况下,它会激活用户帐户。

关于java - 验证 'confirm' 电子邮件链接的防篡改方法以及预防篡改措施?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290070/

相关文章:

binding - Durandal 撰写 : activate method not always called

java - 与apache poi相关的问题

java - java、printf 和小数的问题

Maven:如果配置文件 B 未激活,则仅激活配置文件 A?

ruby-on-rails - 允许管理员激活或停用用户--Rails

c# - 这是使用 Web 服务激活串行 key 的好方法吗?

java - 在 JSF 中构建简单的事务

java - 了解 GIF 何时播放完毕

java - 使用变量作为文件路径将 ImageIcon 添加到 JPanel

c++ - 适用于 Windows Phone 8.1 的最小应用程序(无 XAML): differences with desktop app