【发布时间】:2015-04-15 20:00:15
【问题描述】:
我正在使用Devise 实现一个Rails 应用程序,以完成大部分用户身份验证工作。我注意到的一件事是,在为安全敏感任务传递标识符时,它们总是使用查询字符串参数完成。
例如,发送给用户的密码重置电子邮件中包含的 URL 可能如下所示:
http://example.com/users/password/edit?reset_password_token=_aPKoNpLHm7HYs_o4Qex
Devise 根据reset_password_token 查找用户,并在用户重置表单时更改密码。
我刚刚实现了一个 Devise 未处理的类似功能。在每封电子邮件中,我都包含一个退订链接。控制器基于唯一令牌查找用户并将其取消订阅标志设置为 true,即使用户未登录。
但是,我生成的 URL 如下所示:
http://example.com/subscription/3e7eb22a268b62d5/edit
这基本上与 Devise 所做的相同。不同之处在于我将令牌包含在 URL 路径本身而不是查询字符串中。
在我看来,这更像是 RESTful,因为它指向用户随后更新的特定资源(相关订阅)(通过将表单发布到 PUT http://example.com/subscription/3e7eb22a268b62d5)。除了这个好处之外,我认为这两种方法之间没有任何区别。
在 RESTful URL 上使用查询字符串参数有什么原因吗?
【问题讨论】:
标签: security rest uri query-string