Ruby on rails 4 解释令牌在通过GET传输数据时的使用
(完整上下文=对该问题的最新答复/讨论:) 我希望用户单击电子邮件中的链接,并能够在我的数据库中发布数据。我目前的理解是:Ruby on rails 4 解释令牌在通过GET传输数据时的使用,ruby-on-rails-4,get,uri,token,email,Ruby On Rails 4,Get,Uri,Token,Email,(完整上下文=对该问题的最新答复/讨论:) 我希望用户单击电子邮件中的链接,并能够在我的数据库中发布数据。我目前的理解是: 最佳实践(根据上述问题的最新答案以及我已经尝试过的其他答案)=使用GET将令牌传输到我的网站(可能类似于example.com?token=asdfaiosukljlkdjslfjasklf),然后在我的网站上使用脚本获取该令牌,解析数据并发布它 令牌应该与GET一起使用的原因是它不安全;任何人都可以看到URI,它可以被缓存/添加书签,因此,如果不断提交,它可能会导致错误
- 最佳实践(根据上述问题的最新答案以及我已经尝试过的其他答案)=使用GET将令牌传输到我的网站(可能类似于
),然后在我的网站上使用脚本获取该令牌,解析数据并发布它example.com?token=asdfaiosukljlkdjslfjasklf
- 令牌应该与GET一起使用的原因是它不安全;任何人都可以看到URI,它可以被缓存/添加书签,因此,如果不断提交,它可能会导致错误的发布到数据库,也就是说,我不应该像GET那样做
,因为这会反复触发操作(在我的情况下,由于我的一个操作导致删除记录,这将是不好的)example.com/:id/action
example.com?token=asdfaiosugkljlfkdjslfjasklf
,那么这个链接仍然可以被书签/缓存/无论什么。作为我研究的一部分,我查看了另一个web服务向我发送的电子邮件,其中有一个按钮,我可以单击该按钮发布内容。事实上,每次我检查链接时,它都是一样的:www.theirsite.com/?uid=ABC
其中ABC是Base64令牌。事实上,我可以反复单击它,我可以将其添加到书签中,然后反复打开它。看起来数据上的掩码,但每次都是相同的掩码,是没有意义的
现在,如果出于安全考虑,掩码在那里,我有点明白了,因为可能只有您的网站能够解码令牌。但在我的情况下,我只想确保URI不会无意中导致多次重复发布,正如我所说,这会删除数据。我没有敏感的用户信息
当然,我意识到我的理解中可能存在巨大的漏洞,因此我想让更聪明的人来解释“大人物”在以下方面的行为:
first
方法?之后,用户会看到一个弹出窗口,表明他们已经执行了操作?)令牌在这里有两个用途。首先,它们可用于验证您的行为是否合法地来自您发送的电子邮件,而不是来自强制使用URL的人。其次,令牌可用于防止意外重播或直接重播攻击。下面是如何: 当你发送一封带有如下链接的电子邮件时:/requests/1001/accept?token=asdf…你实际上应该是:a)以安全的方式随机生成令牌,B)将令牌存储到数据库中,可能还有一些额外的元数据。关于元数据的更多信息 设计应该是:当且仅当令牌未被使用且令牌仅一次性使用时,请求才有效。当用户单击您的电子邮件链接时,您需要检查提供的令牌是否与令牌表中的行匹配。然后从表中删除令牌(除非您喜欢竞争条件,否则使用事务)。这可以证明是实现您想要的最简单的方法-您不需要做任何其他事情来确保链接不会被重复跟踪,并且您不能做任何事情(根据定义,跟踪链接是否已被使用需要您记住该链接的特定信息)。你在调查的电子邮件中看到的代币就是这样运作的 您可以向令牌添加其他元数据,例如,只有合法使用它的用户的ID。但这可能会导致数据库的非规范化,具体取决于其他表的设置方式
作为旁注,这不是RESTful,因为它是GET请求中的一个变异操作,但在这种情况下,POST被高估了,不会在GET上提供任何信息。它也很难在电子邮件中实现(您可以使用rails的_method参数对其进行破解,但它没有真正的好处)。令牌在这里有两个用途。首先,它们可以用来验证您的行为是否合法地来自您发送的电子邮件,而不是来自强制使用URL的人。其次,令牌可用于防止意外重放或直接重放攻击。以下是方法: 当你发送一封带有如下链接的电子邮件时:/requests/1001/accept?token=asdf。。。实际上,您应该是:A)以安全的方式随机生成令牌,B)将令牌存储到数据库中,可能还有一些额外的元数据。关于元数据的更多信息 设计应该是:当且仅当令牌未被使用且令牌仅一次性使用时,请求才有效。当用户单击您的电子邮件链接时,您需要检查提供的令牌是否与令牌表中的行匹配。然后从表中删除令牌(除非您喜欢竞争条件,否则使用事务)。这可以证明是实现您想要的最简单的方法-您不需要做任何其他事情来确保链接不会被重复跟踪,并且您不能做任何事情(根据定义,跟踪链接是否已被使用需要您记住该链接的特定信息)。你在调查的电子邮件中看到的代币就是这样运作的 您可以向令牌添加其他元数据,例如,只有合法使用它的用户的ID。但这可能会导致数据库的非规范化,具体取决于您的