对安全概念的新认识,所以我觉得以前必须这样做。
对于经典提交表单:
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
当然,此解决方案还必须与多个用户同时提交表单,以便一个密钥不会与另一个请求交叉引用,然后被错误地拒绝。
答案 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感兴趣。