将令牌从一个控制器方法安全地传递到另一个控制器方

时间:2013-08-16 09:46:47

标签: ruby-on-rails scope token

我想为我的用户生成随机令牌。出于UX原因,我想在MyController#new中生成此令牌,以便在new视图中显示该令牌。然后我需要将它传递给create方法。但是,我想阻止用户更改它。

我知道有3种方法可以做到:

  1. 将其作为隐藏字段传递
  2. 通过会话
  3. 将其写入数据库,标记为不完整,然后将其设置为在create method
  4. 中完成

    前两种方法并不安全,而最后一种方法则过度。

    有没有办法在控制器中安全地将参数从new传递到create方法?

1 个答案:

答案 0 :(得分:2)

Rails和#及以上版本的会话非常安全,因为它们是经过哈希处理的。官方图书馆说没有实际证据表明会话哈希遭到破坏,因此用户只能从浏览器中删除该令牌,但他们无法将其更改为逻辑上正确的值。

您可以做的是保存会话中的值并自己从该令牌创建哈希值,并将其保存在会话中,然后在接收端,您可以从会话重新生成哈希值并验证该值。

没有用户可以编辑它们匹配的会话值。如果它不匹配,您可以丢弃这些值并扔到错误页面。

我希望我能回答你,如果有任何误解请问。