私は完全に機能しているWebサービスを作成しました。しかし、config/main.phpでCSRFの検証を有効にするとすぐに、Webサービスを使用しようとするとエラーが発生します:アンドロイドアプリを使用したWebサービスによるCSRF検証
CSRFトークンを確認できませんでした。
の代わりにCSRFトークンの検証をスキップし、これに他の解決策はありますか?
Android App経由でWebサービスを使用している場合、実際にCSRFトークンを正常に検証する方法はありますか?
私は完全に機能しているWebサービスを作成しました。しかし、config/main.phpでCSRFの検証を有効にするとすぐに、Webサービスを使用しようとするとエラーが発生します:アンドロイドアプリを使用したWebサービスによるCSRF検証
CSRFトークンを確認できませんでした。
の代わりにCSRFトークンの検証をスキップし、これに他の解決策はありますか?
Android App経由でWebサービスを使用している場合、実際にCSRFトークンを正常に検証する方法はありますか?
質問に記載されていない複数の事項によって異なります。
最初の質問は、認証がサービスでどのように機能するかです。クライアントブラウザが自動的に送信しない(クッキーベースではなく、たとえばトークンをリクエストヘッダーに追加するなど)場合、サービスはCSRFに対して脆弱ではなく、csrf保護をオフにすることができます。
クッキーを使用する場合(ほとんどの場合、ほとんどの場合、サービスには最適ではないかもしれません)、CSRFに対してクッキーを保護する必要があります。方法については、どのような保護が実装されているかによって異なります。標準synchronizer token patternの場合は、まずGET経由でページをダウンロードし、トークンを抽出し、後続のPOST/PUT/DELETE要求の適切なフィールドに戻す必要があります。これはモバイルアプリでは厄介なように見えますが、代わりにAPIをトークンベースの認証に変更する方がよいでしょう。 :)もしそれがdouble postingのようなものであれば、サービスで受け入れられる二重掲示されたトークンを作ることができるかもしれません。それが他のものであれば、保護の仕組みを理解し、実際に正しいことをサービスに渡す方法を見つける必要があります。
サイドローは、CSRFに対して脆弱なCookieベースの認証だけではありません。たとえば、APIがHTTP基本認証を使用している場合、これもブラウザによってキャッシュされ、自動的に送信されます。したがって、ユーザーがブラウザに直接資格情報を入力すると、CSRFに対して脆弱です(ただし、 )。また、クライアント証明書はブラウザによって自動的に送信され、同様にCSRFの脆弱性があります。だから、それをまとめる(およびビットが簡略化され、詳細については上記参照)する
:
は注意して送信することができますどのようにCORSは、サービス(モバイルアプリのために必要ではない)、複雑にすることで有効になっている場合の点で少し物事CSRFですが、これは直交問題です。
クイック返信ありがとうございます! 認証サービスはCookieベースではないため、CSRF保護を削除しました。 しかし、新しいリクエストがあるたびに、カートに商品が表示されないため、新しいセッションIDが送信されています。誰かがカートに商品を追加すると、いくつかのsession_id(sess_4qc418amqa6g69uicosu0jsou6)が表示されますが、カートページに表示されます。カートページのsession_id(sess_5mcj87a15b39o1r8fm9tp8gkl6)が変更されたため、商品がゼロと表示されます。私はyii1.1.17を使っています。 –
それは、サーバーのセッション処理に関するいくつかの問題があるように見えます。ウェブブラウザや郵便配達員からウェブサービスを呼び出すと、期待通りに機能していますが、アンドロイドアプリからウェブサービスを使用しているとき、新しいユーザーとなり、毎回新しいセッションが作成されます。 問題の原因がわからないため、同じアプリが別のサーバーで正常に動作しています。 –