CSRF攻撃の脆弱性に関する疑問を解決するには、まず使用する認証メカニズム(トークンベースまたはCookieベース)を決定する必要があります。 CSRFの攻撃の要点は、Cookie、IPアドレス、またはブラウザが要求に自動的に含まれるものを使用して、ユーザーのログオンしたコンテキストを保持するアプリケーションを悪用することです(CSRFと攻撃の詳細については、thisの記事を参照してください)。
たとえば、Cookieベースの認証を使用しており、Cookieがその後のHttpリクエスト(Cookieが有効である、つまり有効期限が切れていないなど)に自動的にブラウザに含まれているということに頼っているとします。特定のユーザーがリクエストを送信したことを確認します。クッキーはブラウザの要求に自動的に含まれるため、攻撃者はバックエンドサーバが処理できるリクエストを再構築することができます。また、ウェブサイトのユーザがブラウザでこのリクエストを実行できるようにすることができれば、バックエンドサーバはあたかもユーザーの正当な要求であるかのように見えるため、リクエストを却下することができます。
トークンベースの認証の場合、ブラウザは認証トークンを要求ヘッダーに自動的に含めないため、問題はありません。したがって、攻撃者は、偽の要求を検証するためにブラウザだけに頼ることはできません。
さらに、CSRF攻撃は
です。次に、クロスオリジンポリシーに関する次の質問です。これは現在すべての信頼できるブラウザによって実施されているため、多数のユーザーがクロスソースポリシーに準拠した要求を送信することが期待できます。したがって、あなたは、バックエンドサーバーで次のいずれかを実行する必要があります。
- あなたのbacknedサーバが
localhost:8080
上で実行されていることを指定し、localhost:4200
上のあなたの角度のアプリとして見て、私はあなたがそれらを実行していることを前提としています同じホスト上にある。両方を実稼働環境で同じホスト上で実行する予定の場合は、'Access-Control-Allow-Origin'
ヘッダーをバックエンドサーバーの'*'
に設定するだけです。
これにより、バックエンドサーバーは任意の起点からの要求を受け入れることができます。その後、ファイアウォールを使用して、ポート8080
を外部接続からアクセスできます。
ファイアウォールだけに依存することはお勧めできませんので、これは迅速な修正です(特にローカルに移行する場合)。
- 角度アプリケーションをソースとしてのみ受け入れるように
Access-Control-Allow-Origin
ヘッダーを設定することをお勧めします。したがって、アプリケーションがバックエンドサーバーと同じホストにある場合(ローカル開発の場合など)は、http://localhost:4200
に設定する必要があります。 AngularアプリケーションがSpringサーバーとは別のホスト上にある場合は、Webサイトのドメインなどを指定する必要があります。 Access-Control-Allow-Origin
ヘッダーのhttp://example.com
(このヘッダーの使用方法については、明確な説明については、thisポストを参照してください)。
これがあなたの質問に答えることを願っています。