3

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 関連のセキュリティに関する私の知識は、これが悪いことであるかどうかを判断するのに十分ではありません。どんな助けでも大歓迎です。

4

1 に答える 1

5

これは安全に行うべきだと思います。Same Origin ポリシーは、悪意のあるサイトがユーザーの 1 人の CSRF ログインを実行し、その後応答からトークンを盗むことから保護する必要があります。ブラウザーは、別のドメインのホストに JSON 要求を送信しません。

JSON ハイジャック (http://haacked.com/archive/2009/06/24/json-hijacking.aspx) のようなものは理論的には可能ですが (私が知っているすべてのブラウザーでパッチが適用されています)、その脅威は以下を仮定すると、軽減されます。

  • 作成アクションでのみトークンを返します
  • このアクションは、投稿リクエストを介してのみアクセスできます
于 2012-11-20T20:07:09.233 に答える