生成在创建操作中签入的新操作中的密钥

时间:2016-03-03 19:06:01

标签: ruby-on-rails security ruby-on-rails-4

对安全概念的新认识,所以我觉得以前必须这样做。

对于经典提交表单:

AdminList

我在AdminList def new end def create unless params[:key] != ENV["key"] end end 上有一个我正在检查new.html.erb操作的密钥。但问题是这个键只是一个静态环境变量。

我想知道每次呈现hidden_input页面时是否有动态创建新密钥的方法,然后对此动态密钥进行create操作检查。这需要在new.html.erb操作中生成的变量,我可以在create操作中检查该变量。输出将是这样的:

new

当然,此解决方案还必须与多个用户同时提交表单,以便一个密钥不会与另一个请求交叉引用,然后被错误地拒绝。

2 个答案:

答案 0 :(得分:0)

Rails已经提供了一个名为CSRF-tokens的保护级别。在每个表单中,生成authenticity_token并作为隐藏字段插入。该令牌与用户的会话相关联。提交POST请求后,将检查authenticity_token

https://nvisium.com/blog/2014/09/10/understanding-protectfromforgery/

在控制器中使用protect_from_forgery启用此功能。

class ApplicationController < ActionController::Base
  protect_from_forgery
end

http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

答案 1 :(得分:0)

实现自己的安全机制通常是个坏主意。如果您不打算保护您的应用免受CSRF(这是内置的)并且仍然想要构建自己的东西,那么您可能会对this rotp feature感兴趣。