0

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

我知道3种方法来做到这一点:

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

前两种方法不安全,而最后一种方法是矫枉过正。

有没有办法安全地将参数从控制器中的方法传递newcreate方法?

4

1 回答 1

2

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

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

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

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

于 2013-08-16T09:54:14.037 回答