首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证“确认”电子邮件链接的防篡改方法?

验证“确认”电子邮件链接的防篡改方法?
EN

Stack Overflow用户
提问于 2016-02-09 10:49:50
回答 2查看 189关注 0票数 0

故事背景:我有一个ePetition类型的服务运行在我的网站上,我电子邮件给人们一个链接,他们可以‘同意’的请愿。此链接将只包含发送者的'petitionID‘和’用户名‘。

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

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

也许拥有url作为:用户名,petitionId,然后是一个散列

代码语言:javascript
复制
www.website.com/accept.jsp?user='username'&id='petid'&token='1039678106'

令牌可以由用户名+id(来自链接)+datePetitionStarted(类似于url中未公开的盐类)组成,例如:

代码语言:javascript
复制
String test = "mike.Who@petitionwebsite.com+1524+09/02/2016";
        System.out.println(test.hashCode());

这将给我一个'1039678106‘的散列,这意味着服务器端,我可以接受ID参数,人的用户名,并使用datePetitionStarted,获取哈希代码并比较它们。

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

我真的想要一种象征性的接受请愿书的方法,所以如果有人有其他的想法,那就太棒了。

谢谢,

麦克

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-09 12:00:43

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

代码语言:javascript
复制
http://my_domain_name/Activate?key=6faeecf5-9ab3-46f4-9785-321a5bbe2ace

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

票数 2
EN

Stack Overflow用户

发布于 2016-02-09 12:54:25

虽然String.hashcode()可以跨实例为相同的字符串返回相同的值,但这并不一定。

每当在执行Java应用程序期间在同一个对象上多次调用它时,hashCode方法必须始终如一地返回相同的整数,前提是不修改关于该对象的相等比较中使用的任何信息。--从一个应用程序的一个执行到同一个应用程序的另一个执行,这个整数不需要保持一致。

Object.hashcode的API文档。

因此,如果你要沿着这条路线走下去,你应该使用你自己的散列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档