2017-05-12 1 views
1

私は、フロントにangle(2)を持つアプリケーションと、データベースから/からデータをフェッチ/操作するSpring Restful Serviceを構築しようとしていました。今、私を絶えず悩ましていることの1つは、セキュリティを確保する方法です。私は認証に対処するためにSpring Securityを実装しました。角と春のセキュリティアーキテクチャ

しかし、ここでは、CSRF攻撃のようないくつかのことが、クロスオリジン要求によって行われます。 Anglesは、Spring Rest Serviceのものとは異なるサーバー(localhost:4200デフォルト)で実行されます(例:tomcat - localhost:8080)。残りのサービスへの要求が行われると、クロスオリジン要求として扱われます。このシナリオで春のセキュリティによって提供されるcsrf保護を使用できるかどうかは私には分かりません。それ以外の場合は、私のレストサービスが悪意のある攻撃によって悪用されるのを防ぐ方法を教えてください。

CORS issue - No 'Access-Control-Allow-Origin' header is present on the requested resource私はcsrf保護が無効で、CORSが必要に応じて設定されていることがわかります。 しかし、それは休憩サービスが攻撃に開放されているかどうかに関する私の質問に対処していませんか?

P.S私はWebアプリケーションのセキュリティ設定がとても新しいので、何か間違っているか間違っていると指摘してください。

答えて

1

CSRF攻撃の脆弱性に関する疑問を解決するには、まず使用する認証メカニズム(トークンベースまたはCookieベース)を決定する必要があります。 CSRFの攻撃の要点は、Cookie、IPアドレス、またはブラウザが要求に自動的に含まれるものを使用して、ユーザーのログオンしたコンテキストを保持するアプリケーションを悪用することです(CSRFと攻撃の詳細については、thisの記事を参照してください)。

たとえば、Cookieベースの認証を使用しており、Cookieがその後のHttpリクエスト(Cookieが有効である、つまり有効期限が切れていないなど)に自動的にブラウザに含まれているということに頼っているとします。特定のユーザーがリクエストを送信したことを確認します。クッキーはブラウザの要求に自動的に含まれるため、攻撃者はバックエンドサーバが処理できるリクエストを再構築することができます。また、ウェブサイトのユーザがブラウザでこのリクエストを実行できるようにすることができれば、バックエンドサーバはあたかもユーザーの正当な要求であるかのように見えるため、リクエストを却下することができます。

トークンベースの認証の場合、ブラウザは認証トークンを要求ヘッダーに自動的に含めないため、問題はありません。したがって、攻撃者は、偽の要求を検証するためにブラウザだけに頼ることはできません。
さらに、CSRF攻撃は

です。次に、クロスオリジンポリシーに関する次の質問です。これは現在すべての信頼できるブラウザによって実施されているため、多数のユーザーがクロスソースポリシーに準拠した要求を送信することが期待できます。したがって、あなたは、バックエンドサーバーで次のいずれかを実行する必要があります。

  1. あなたのbacknedサーバがlocalhost:8080上で実行されていることを指定し、localhost:4200上のあなたの角度のアプリとして見て、私はあなたがそれらを実行していることを前提としています同じホスト上にある。両方を実稼働環境で同じホスト上で実行する予定の場合は、'Access-Control-Allow-Origin'ヘッダーをバックエンドサーバーの'*'に設定するだけです。
    これにより、バックエンドサーバーは任意の起点からの要求を受け入れることができます。その後、ファイアウォールを使用して、ポート8080を外部接続からアクセスできます。
    ファイアウォールだけに依存することはお勧めできませんので、これは迅速な修正です(特にローカルに移行する場合)。
  2. 角度アプリケーションをソースとしてのみ受け入れるようにAccess-Control-Allow-Originヘッダーを設定することをお勧めします。したがって、アプリケーションがバックエンドサーバーと同じホストにある場合(ローカル開発の場合など)は、http://localhost:4200に設定する必要があります。 AngularアプリケーションがSpringサーバーとは別のホスト上にある場合は、Webサイトのドメインなどを指定する必要があります。 Access-Control-Allow-Originヘッダーのhttp://example.com(このヘッダーの使用方法については、明確な説明については、thisポストを参照してください)。

これがあなたの質問に答えることを願っています。

関連する問題