私は、モバイルアプリケーションからアクセスするためのREST APIを備えたRailsアプリケーションを開発してきました。Rails APIがCSRFから保護されていることを確認するには?
非常にうまくいきます。ユーザーがモバイルアプリケーションからログインすると、彼は将来のAPIリクエストで使用するauth_token
を取得します。問題は、APIがwebからpath/api/v1/...にアクセスすることでアクセスできることです。このため、CSRFから保護する必要があります。
ApplicationController
から継承し、protect_from_forgery
を「有効」にしたクラスがあります。ここでは例です:
class Api::V1::BaseApiController < ApplicationController
# ...
end
class ApplicationController < ActionController::Base
protect_from_forgery
# ...
end
、私は私のAPIに非GETリクエストを行う際に、auth_token
で、私の要求は正常に完了しますが、ログには、私は有名なWARNING: Can't verify CSRF token authenticity
を見ることができます。 protect_from_forgery
を私のBaseApiController
から削除しても、明らかに警告は出ませんが、私のAPIはCSRF攻撃の脆弱性があります(protect_from_forgery
が存在しない場合、ドメイン間でデータを正常に変更する簡単なHTMLフォームを作成しました)。
私のAPIは安全であることを保証する方法ですが、GET以外のリクエストを行う際の警告も削除しますか?
は、ここで私が作ってみた解決策の一つだが、それはより多くのハックのように見え、1つの余分DBクエリを実行:プロジェクトに関する
class Api::V1::BaseApiController < ApplicationController
# ...
def verified_request?
super || User.where(authentication_token: params['auth_token']).count > 0
end
end
詳細:Railsの3.2.14を、工夫、 AngularJS。プロジェクトのソースコードはhereです。あなたは、人々はので、いくつかは、単に警告を排除するために、以下の提案、(?そもそも何の状態が存在しないので、とにかく乗っ取るために何があります)CSRFは、APIリクエストのための問題ではないことを示唆して表示される場合があり