(全文=对此问题的最新答复/讨论:to in email not posting)
我希望用户点击电子邮件中的链接,并能够在我的数据库中发布数据。我目前的理解是:
example.com?token=asdfaiosugkljlfkdjslfjasklf),然后在我的网站上有一个脚本来获取该令牌,解析数据,并将其发布example.com/:id/action的操作,因为这会多次触发操作(在我的例子中,这会导致删除记录,这是很糟糕的)我不明白的是,令牌是如何不同的,因为它并不是每次用户打开他/她的电子邮件时,都会看到不同的链接。即使我传递了一个令牌,并且电子邮件中的链接是example.com?token=asdfaiosugkljlfkdjslfjasklf,这个链接仍然可以被书签/缓存/任何东西。作为我研究的一部分,我查看了另一个web服务发送给我的电子邮件,在电子邮件中有一个按钮,我可以点击这个按钮发布一些信息。实际上,每次我检查链接时,都是一样的:www.theirsite.com/?uid=ABC,其中ABC是Base64令牌。事实上,我可以反复点击它,我可以一次又一次地给它做书签和打开它。它看起来就像是数据的掩码,但每次都是相同的掩码,毫无意义。
现在,如果掩码在那里是为了安全起见,我有点理解,因为也许只有您的网站能够解码令牌。但在我的例子中,我只想确保URI不会无意中导致多个重复的POSTings,正如我所说的,这将删除数据。我没有敏感的用户信息。
当然,我意识到在我的理解中可能有很大的漏洞,所以我打开这个让更聪明的人来解释“大人物”在以下方面所做的事情:
first方法吗?在此之后,用户会弹出一个显示他们已经执行了操作的弹出?)发布于 2014-08-21 04:07:34
代币在这里有几个用途。首先,它们可以用来验证您的行为是合法的来自您发送的电子邮件,而不是来自某个野蛮人-强制一个URL。第二,令牌可以用来防止意外重播,或完全重播攻击。下面是操作步骤:
当你发送一封电子邮件,链接到:/requestes1001/accept?token=asdf.实际上,您应该是:( A)以安全的方式随机生成令牌;( B)将令牌存储到数据库中,可能还包含一些额外的元数据。稍后将更多地介绍元数据。
设计应该是:只有在令牌未被使用的情况下,请求才是有效的,并且令牌仅为一次性使用。当用户单击电子邮件链接时,需要检查所提供的令牌是否与令牌表中的一行匹配。然后从表中删除令牌(除非您喜欢竞争条件,请使用事务)。这显然是实现你想要的东西的最简单的方法--你不需要做任何其他的事情来确保链接不能被重复跟踪,而且你不能做更少的事情(根据定义,跟踪一个链接是否被使用需要你记住一些特定于该链接的信息)。您在调查的电子邮件中看到的令牌就是这样操作的。
您可以将其他元数据添加到令牌中,例如,只有可能合法使用它的用户的ID。但是,根据其他表的设置方式,这可能最终导致数据库的非规范化。
顺便提一句,这不是RESTful,因为它是GET请求中的一个可变操作,但在本例中,POST被高估了,不会给出任何超出GET的内容。它也很难在电子邮件中实现(你可以用rails的_method参数破解它,但它没有真正的好处)。
https://stackoverflow.com/questions/25373406
复制相似问题