2017-05-26 10 views
3

私たちは、ASP.NET Coreを使用して、3種類のアプリケーションMVCアプリケーション、API、SPA(Angularではなく)をビルドしています。このアプリケーションのすべてのアクションは、許可されたユーザーのみに適用されます。だから私たちはIdentityServerでそれらを保護しています。ベアラトークンとCSRF

ベアラトークンの値を保存するためにクッキーを使用します。私は、クッキーの価値がサーバーに自動的に送られることを理解します。しかし、承認ヘッダーとして追加する必要があるため、これはブラウザによって自動的には行われません。

これは、CSRF攻撃の可能性を緩和しますか? CSRFはベアラトークンでも可能ですが、CSRFトークンを追加する必要がありますか?

答えて

2

はい、依然としてCSRFトークンが必要です。

SPAまたはMVCアプリケーションがユーザーのGETまたはPOSTアクションに基づいてAPIに要求を送信する場合は、依然としてCSRFトークンが必要です。

あなたのSPAでアクションを引き起こすリンクをクリックするようにユーザーを騙したり、MVCアプリケーションに投稿したりすると、アプリケーションはうれしく遵守し、Cookieに格納されたベアラトークンをリクエストヘッダーとして送信しますユーザーがアプリケーション内のリンクをクリックしたときに発生します。

これはCSRF全体のポイントです。攻撃者は、ユーザーがWebアプリケーションでアクションを呼び出したかのようにリクエストを作成します。

1

私が正しく理解していれば、MVCとSPAの両方がIdentity Serverでユーザーを認証し、APIにアクセスするためのCookieプライマリにトークンを格納します。一般的に

、ここでは2つのケースがあります。

  1. あなたのクッキーがHTTP only(フロントエンドではアクセスできません)です。その後、Cookieを抽出してさらにAPIにリクエストを送信するMVCおよびSPAサーバー側にCookieを送信します。このケースでは、あなたが効果的にクッキーで認証し、その結果としてのトークン抽出とAPIに対するベアラ認証が自動クッキー認証の排他的な結果に基づいて行われるので、CSRFに対して通常どおり脆弱です。

  2. フロントエンドでアクセスできます。このケースでは、Javascriptを使用してそれらを読み取って、ベアラ認証リクエストをMVCおよびSPAサーバー側(さらにAPIに渡すため)またはAPIに直接送信して、すべてのバックエンドに潜在的に侵害されたCookieコンテンツを無視させることができます。 このケースでは、CSRFに対して脆弱ではありません(あなたがベアラ認証ヘッダーを明示的に構成しなければならないと指摘したので)。ただし、XSS(cross site scripting)の脆弱性があります。データの検証/衛生上のセキュリティホールまたはサードパーティの依存関係を使用してページに注入されたコードは、Cookieを読み取り、それらを任意のサーバーに再送信できます。このケースは、ローカル/セッションストレージを使用する場合と非常によく似ていますので、脆弱性を説明している記事があなたのシナリオにも適用されます(例:here)。

したがって、主な攻撃としてCSRFまたはXSSを選択する必要があります。

CSRFは偽造防止トークンで完全に防ぐことができますが、失敗した場合は攻撃を整理するのが非常に簡単です。

XSSは、あなたが使用する多数のサードパーティ製ライブラリのために、現代の開発において完全に防止することは理論上困難です(別のXSS攻撃ベクトル - 入力衛生はほとんどの場合MVCフレームワークの大部分あなたのためにデフォルトでlike ASP NET Core)。しかし、あなたはそれを避ける公正な機会があります。多くの場合、このオプションを合理的な選択にしますe.g. Auth0 recommends it

+0

#1について:SPAは一般的にAJAXリクエストで動作し、HttpOnly Cookieにアクセスすることはできません。 – CodeCaster

+1

それは正しいです。それで私は2つのケース(HttpOnlyとnot)を記述したのです。私はローカルストレージとして使用されるカップルのクッキーを見ましたが、疑問があると疑問に思う限り、クッキーからのトークンの抽出を暗黙のうちに質問しました。 – Igor

+0

私はあなたを誤解していることが分かります。 #1は、Ajaxリクエストとともにクッキー(おそらくトークン付き)が送信された場合の通常のクッキー認証の場合とまったく同じです。ここではトークン抽出とcsrfの脆弱性はありません。 – Igor