2017-06-02 17 views
0

私は完全に機能しているWebサービスを作成しました。しかし、config/main.phpでCSRFの検証を有効にするとすぐに、Webサービスを使用しようとするとエラーが発生します:アンドロイドアプリを使用したWebサービスによるCSRF検証

CSRFトークンを確認できませんでした。

の代わりにCSRFトークンの検証をスキップし、これに他の解決策はありますか?

Android App経由でWebサービスを使用している場合、実際にCSRFトークンを正常に検証する方法はありますか?

答えて

1

質問に記載されていない複数の事項によって異なります。

最初の質問は、認証がサービスでどのように機能するかです。クライアントブラウザが自動的に送信しない(クッキーベースではなく、たとえばトークンをリクエストヘッダーに追加するなど)場合、サービスはCSRFに対して脆弱ではなく、csrf保護をオフにすることができます。

クッキーを使用する場合(ほとんどの場合、ほとんどの場合、サービスには最適ではないかもしれません)、CSRFに対してクッキーを保護する必要があります。方法については、どのような保護が実装されているかによって異なります。標準synchronizer token patternの場合は、まずGET経由でページをダウンロードし、トークンを抽出し、後続のPOST/PUT/DELETE要求の適切なフィールドに戻す必要があります。これはモバイルアプリでは厄介なように見えますが、代わりにAPIをトークンベースの認証に変更する方がよいでしょう。 :)もしそれがdouble postingのようなものであれば、サービスで受け入れられる二重掲示されたトークンを作ることができるかもしれません。それが他のものであれば、保護の仕組みを理解し、実際に正しいことをサービスに渡す方法を見つける必要があります。

サイドローは、CSRFに対して脆弱なCookieベースの認証だけではありません。たとえば、APIがHTTP基本認証を使用している場合、これもブラウザによってキャッシュされ、自動的に送信されます。したがって、ユーザーがブラウザに直接資格情報を入力すると、CSRFに対して脆弱です(ただし、 )。また、クライアント証明書はブラウザによって自動的に送信され、同様にCSRFの脆弱性があります。だから、それをまとめる(およびビットが簡略化され、詳細については上記参照)する

  1. は、サービスのクッキーベースの認証ですか?
    • いいえ - > CSRF保護を削除します。これは脆弱ではありません(上記の例外を参照)。
    • はい - > 2.
  2. あなたは(リクエストヘッダに送信されるトークンで)ベースのトークンに認証を変更することはできますか?
    • はい - >変更してください。
    • いいえ3.
  3. CSRF保護の方法は何ですか?
    • Synchronizerのトークンパターン - >あなたは
    • ダブルポストを使用するためのトークンを取得するためのページを取得する必要があります - >実装に依存しますが、クッキーに適切な値とヘッダ
    • を投稿倍増することができるかもしれ他
    • 何か - >を見つけるどのように保護が働くと、あなたは右のトークン
    • また

は注意して送信することができますどのようにCORSは、サービス(モバイルアプリのために必要ではない)、複雑にすることで有効になっている場合の点で少し物事CSRFですが、これは直交問題です。

+0

クイック返信ありがとうございます! 認証サービスはCookieベースではないため、CSRF保護を削除しました。 しかし、新しいリクエストがあるたびに、カートに商品が表示されないため、新しいセッションIDが送信されています。誰かがカートに商品を追加すると、いくつかのsession_id(sess_4qc418amqa6g69uicosu0jsou6)が表示されますが、カートページに表示されます。カートページのsession_id(sess_5mcj87a15b39o1r8fm9tp8gkl6)が変更されたため、商品がゼロと表示されます。私はyii1.1.17を使っています。 –

+0

それは、サーバーのセッション処理に関するいくつかの問題があるように見えます。ウェブブラウザや郵便配達員からウェブサービスを呼び出すと、期待通りに機能していますが、アンドロイドアプリからウェブサービスを使用しているとき、新しいユーザーとなり、毎回新しいセッションが作成されます。 問題の原因がわからないため、同じアプリが別のサーバーで正常に動作しています。 –

関連する問題