ASP.NET Core Security の概要
ASP.NET Core によって、開発者はセキュリティを構成して管理することができます。 次の一覧に、セキュリティに関するトピックへのリンクを示します。
- 認証
- 承認
- データ保護
- HTTPS の適用
- 開発中のアプリ シークレットの安全な格納
- XSRF/CSRF 防止
- クロス オリジン リソース共有 (CORS)
- クロスサイト スクリプティング (XSS) 攻撃
これらのセキュリティ機能を使用すれば、堅牢かつセキュアな ASP.NET Core アプリを構築できます。
このノードのガイダンスを追加または置き換える Blazor セキュリティ カバレッジについては、 ASP.NET Core Blazor 認証と承認 および Blazor の Security と Identity ノードのその他の記事をご覧ください。
ASP.NET Core セキュリティ機能
ASP.NET Core には、ASP.NET Core アプリをセキュリティで保護するための多くのツールとライブラリが用意されています。たとえば、組み込みの identity プロバイダーや、Facebook、Twitter、LinkedIn などのサードパーティの identity サービスなどです。 ASP.NET Core には、アプリ シークレットを格納するための方法がいくつか用意されています。
認証と承認
認証とは、ユーザーが提供した資格情報をオペレーティング システム、データベース、アプリまたはリソースに格納されているものと比較するプロセスのことです。 資格情報が一致した場合、ユーザーは正常に認証され、承認プロセス中に、承認されたアクションを実行できます。 承認とは、ユーザーに許可する実行内容を決定するプロセスのことです。
また、認証はサーバー、データベース、アプリまたはリソースなどの領域に入る方法と見なすことができます。一方、承認はユーザーがその領域 (サーバー、データベース、またはアプリ) 内のいずかのオブジェクトに対して実行できるアクションです。
ソフトウェアの一般的な脆弱性
ASP.NET Core および EF には、アプリをセキュリティで保護し、セキュリティ違反を防止するのに役立つ機能が含まれています。 以下にリストされているリンクから、Web アプリの最も一般的なセキュリティの脆弱性を回避するための手法の詳細を示すドキュメントにアクセスできます。
この他にも知っておく必要がある脆弱性はあります。 詳細については、目次のセキュリティと Identity のセクションにある他の記事を参照してください。
安全な認証フロー
最も安全な認証オプションを使用することをお勧めします。 Azure サービスの場合、最も安全な認証はマネージド ID です。
リソース所有者のパスワード資格情報の付与を避けるべき理由は次の通りです。
- それは、ユーザーのパスワードをクライアントに公開することになります。
- これは重大なセキュリティ上のリスクです。
- 他の認証フローが不可能な場合にのみ行なってください。
マネージド ID は、コード、環境変数、または構成ファイルに資格情報を格納する必要なく、サービスに対して認証を行う安全な方法です。 マネージド ID は Azure サービスで使用でき、Azure SQL、Azure Storage、およびその他の Azure サービスで使用できます。
アプリがテスト サーバーにデプロイされると、環境変数を使用して接続文字列をテスト データベース サーバーに設定できます。 詳細については、構成に関するページを参照してください。 環境変数は、通常、暗号化されていないプレーンテキストで格納されます。 コンピューターまたはプロセスが侵害された場合、信頼されていないパーティーが環境変数にアクセスできるようになります。 最も安全な方法ではないため、環境変数を使用して運用接続文字列を格納しないことをお勧めします。
構成データのガイドライン:
- 構成プロバイダーのコードやプレーンテキストの構成ファイルには、パスワードなどの機密データを格納しないでください。 Secret Manager ツールを使用すると、開発時にシークレットを格納できます。
- 開発環境やテスト環境では運用シークレットを使用しないでください。
- プロジェクトの外部にシークレットを指定してください。そうすれば、誤ってリソース コード リポジトリにコミットされることはありません。
構成データのガイドライン:
- 構成プロバイダーのコードやプレーンテキストの構成ファイルには、パスワードなどの機密データを格納しないでください。 Secret Manager ツールを使用すると、開発時にシークレットを格納できます。
- 開発環境やテスト環境では運用シークレットを使用しないでください。
- プロジェクトの外部にシークレットを指定してください。そうすれば、誤ってリソース コード リポジトリにコミットされることはありません。
詳細については、以下を参照してください:
- マネージド identity のベスト プラクティスに関する推奨事項
- コードの資格情報を処理せずにアプリケーションからリソースに接続する
- マネージド ID を使用して他のサービスにアクセスできる Azure サービス
- IETF OAuth 2.0 セキュリティのベスト カレント プラクティス
その他のクラウド プロバイダーについては、次を参照してください。
その他のリソース
ASP.NET Core