3

我正在构建一个应用程序,它将(希望)通过 JSON 处理会话创建和销毁。目前,我发现这样做的最好方法是让 Railsform_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 相关安全性的了解还不够扎实,无法知道这是否是一件坏事。任何帮助表示赞赏。

4

1 回答 1

5

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

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

  • 您只在创建操作中返回令牌
  • 此操作只能通过发布请求访问
于 2012-11-20T20:07:09.233 回答