【问题标题】:Return CSRF token in JSON response在 JSON 响应中返回 CSRF 令牌
【发布时间】:2012-07-22 06:38:57
【问题描述】:

我正在构建一个应用程序,它将(希望)通过 JSON 处理会话创建和销毁。目前,我发现这样做的最好方法是让 Rails 返回 form_authentication_token 作为对登录的成功 JSON 响应的一部分,即(在我的 Api::SessionsController 中):

def create
  @user = User.find_for_authentication(email: params[:email])

  if @user && @user.valid_password?(params[:password])
    sign_in(@user)
    render json: { success: true, token: form_authenticity_token }
  else
    render json: { success: false, errors: ['Invalid email or password'] }, status: 401
  end
end

但是,我对 CSRF 相关安全性的了解还不够扎实,无法知道这是否是一件坏事。任何帮助表示赞赏。

【问题讨论】:

    标签: ruby-on-rails session csrf


    【解决方案1】:

    我认为这应该是安全的做法。同源策略应该保护您免受恶意站点的影响,该站点能够执行您的一个用户的 CSRF 登录并随后从响应中窃取令牌。浏览器不会向不同域的主机提交 JSON 请求。

    JSON 劫持 (http://haacked.com/archive/2009/06/24/json-hijacking.aspx) 之类的事情在理论上是可能的(尽管它已在我知道的所有浏览器中进行了修补),但是假设以下情况也应减轻威胁:

    • 您只在创建操作中返回令牌
    • 此操作只能通过发布请求访问

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-19
      • 2016-08-03
      • 2018-10-21
      • 2015-11-20
      • 2021-10-27
      • 1970-01-01
      • 2015-03-29
      • 2013-09-18
      相关资源
      最近更新 更多