背景故事: 我的网站上运行着一个电子请愿类型的服务,我通过电子邮件向人们发送一个链接,他们可以在其中“同意”请愿书。此链接仅包含发送者的“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/