在创建操作中检查的新操作中生成密钥
问题描述:
新的安全概念,所以我觉得这一定是以前完成的。在创建操作中检查的新操作中生成密钥
对于经典的提交表单:
def new
end
def create
unless params[:key] != ENV["key"]
end
end
我对new.html.erb
一个hidden_input
与我在create
行动正在检查的关键。但问题是这个键只是一个静态环境变量。
我想知道是否有办法动态地创建一个新的密钥,每次new.html.erb
页面呈现,然后有create
行动检查这个动态密钥。这需要在new
操作中生成的变量,我可以在create
操作中检查该变量。输出会是这样的:
def new
key = SecureRandom
end
def create
unless params[:key] != key
end
end
当然,这个解决方案也将有多个用户同时提交表单的工作,让一个键不生气与另一个请求引用,然后错误地抛弃。
答
Rails已经提供了一个名为CSRF令牌的保护级别。在每个表单中,生成一个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
我知道CSRF,但我需要一些自定义来验证用户的特定身份 – james