Tag: csrf

设计用户sign_in为CSRF令牌真实性令牌提供身份validation错误

我正在使用带有rails devise (最新版本 – 3.2.0)(最新版本 – 4.0.1) 我正在进行简单的身份validation(没有ajax或api)并且获得CSRF真实性令牌的错误。 检查下面的POST请求 started POST “/users/sign_in” for 127.0.0.1 at 2013-11-08 19:48:49 +0530 Processing by Devise::SessionsController#create as HTML Parameters: {“utf8″=>”✓”, “authenticity_token”=>”SJnGhXXUXjncnPhCdg3muV2GYCA8CX2LVFV78pqddD4=”, “user”=> {“email”=>”a@a.com”, “password”=>”[FILTERED]”, “remember_me”=>”0”}, “commit”=>”Sign in”} Can’t verify CSRF token authenticity User Load (0.4ms) SELECT “users”.* FROM “users” WHERE “users”.”email” = ‘a@a.com’ LIMIT 1 (0.1ms) begin transaction SQL (0.4ms) […]

单页应用程序和CSRF令牌

我需要使用单页应用程序(React,Ember,Angular,我不关心)和Rails CSRF保护机制。 我想知道是否需要在ApplicationController创建令牌evey时间,如下所示: class ApplicationController < ActionController::Base after_action :set_csrf_cookie def set_csrf_cookie cookies["X-CSRF-Token"] = form_authenticity_token end end 或者我可以只创建一次令牌 。 每会话或每(非GET)请求? 我认为令牌在会话有效之前仍然有效,对吧? 澄清 : 每当我浏览页面时,我都会看到Rails默认应用程序(服务器呈现页面)更新csrf-token。 所以每次都改变。 因此,在我的情况下,如果我为每个after_action创建一个新令牌,那么之前的CSRF令牌仍然适合该会话。 那么,如何使前一个令牌无效? 我必须? 因为只有我无效才有意义,对吧?

禁用CSRF SiteWide

有没有办法为所有控制器禁用CSRF,还是必须在每个控制器的基础上禁用它? 我在rails上使用ruby作为API而且不需要任何类型的CSRF,因为请求不是基于会话的任何地方。 我想禁用JSON请求。 我相信这可能有用,但我不确定 class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery skip_before_action :verify_authenticity_token, if: :json_request? #Checks format for json protected def json_request? request.format.json? end end

覆盖控制器中的protect_from_forgery策略

我想用两种不同的protect_from_forgery策略构建一个rails应用程序:一个用于Web应用程序,另一个用于API。 在我的应用程序控制器中,我有这行代码: protect_from_forgery with: :exception为了防止CSRF攻击,它工作得很好。 在我的API命名空间中,我创建了一个从我的应用程序控制器inheritance的api_controller,它是API命名空间中所有其他控制器的父类,我用以下代码修改了上面的代码: protect_from_forgery with: :null_session 。 遗憾的是,我在尝试发出POST请求时出错:“无法validationCSRF令牌的真实性”。 我不想跳过我的API控制器中的verify_authenticity_token方法,我只想在我的应用程序中有两个不同的策略,那么如何覆盖我的应用程序控制器中定义的protect_from_forgery策略? 编辑 :好的,所以我最终做了我最初不想做的事情:改变我的api_controller的inheritance:它现在inheritance自ActionController :: Base,而不再是我的应用程序控制器。 它现在可以工作但是: 它没有回答我的问题,即覆盖protect_from_forgery策略。 它不是DRY,因为我必须复制/覆盖之前在我的application_controller中的内容。 所以,如果有人有真正的方法来覆盖这种方法,我会很感激。