ClickOnce アプリケーションは、保護されたリソースと操作に対してコードが持つアクセスを制限するために、.NET Framework のコード アクセス セキュリティ制約の対象となります。 そのため、ClickOnce アプリケーションを適宜記述するために、コード アクセス セキュリティの影響を理解することが重要です。 アプリケーションでは、完全信頼を使用することも、インターネットゾーンやイントラネットゾーンなどの部分ゾーンを使用してアクセスを制限することもできます。
さらに、ClickOnce は証明書を使用して、アプリケーションの発行元の信頼性を確認し、アプリケーションマニフェストと配置マニフェストに署名して、ファイルが改ざんされていないことを証明します。 署名は省略可能な手順であり、マニフェストの生成後にアプリケーション ファイルを簡単に変更できます。 ただし、署名されたマニフェストがないと、中間者セキュリティ攻撃でアプリケーション インストーラーが改ざんされないようにすることは困難です。 このため、アプリケーションのセキュリティ保護に役立つアプリケーション マニフェストと配置マニフェストに署名することをお勧めします。
ゾーン
ClickOnce テクノロジを使用して配置されるアプリケーションは、セキュリティ ゾーンによって定義される一連のアクセス許可とアクションに制限されます。 セキュリティ ゾーンはブラウザーで定義され、アプリケーションの場所に基づいています。 次の表に、デプロイの場所に基づく既定のアクセス許可を示します。
デプロイの場所 | セキュリティ ゾーン |
---|---|
Web から実行 | インターネット ゾーン |
Web からインストールする | インターネット ゾーン |
ネットワーク ファイル共有からインストールする | ローカル イントラネット ゾーン |
CD-ROM からインストールする | 完全信頼 |
既定のアクセス許可は、元のバージョンのアプリケーションがデプロイされた場所に基づいています。アプリケーションに対する更新は、これらのアクセス許可を継承します。 Web またはネットワークの場所からの更新プログラムを確認するようにアプリケーションが構成されていて、新しいバージョンが使用可能な場合、元のインストールでは、完全信頼アクセス許可ではなく、インターネットまたはイントラネット ゾーンのアクセス許可を受け取ることができます。 ユーザーにメッセージが表示されないようにするために、システム管理者は、特定のアプリケーション発行元を信頼できるソースとして定義する ClickOnce 配置ポリシーを指定できます。 このポリシーが展開されているコンピューターの場合、アクセス許可は自動的に付与され、ユーザーにはメッセージが表示されません。 詳細については、「 信頼されたアプリケーションの展開の概要」を参照してください。 信頼されたアプリケーションの展開を構成するために、証明書をコンピューターまたはエンタープライズ レベルにインストールできます。 詳細については、「 方法: ClickOnce アプリケーションのクライアント コンピューターに信頼できる発行元を追加する」を参照してください。
注
ClickOnce for .NET Core および .NET 5 以降では、この機能はサポートされていません。 詳細については、「 .NET の ClickOnce」を参照してください。
コードアクセスのセキュリティ方針
アプリケーションのアクセス許可は、アプリケーション マニフェストの <trustInfo> Element 要素 の設定によって決まります。 Visual Studio では、プロジェクトの [セキュリティ ] プロパティ ページの設定に基づいて、この情報が自動的に生成されます。 ClickOnce アプリケーションには、要求した特定のアクセス許可のみが付与されます。 たとえば、ファイル アクセスに完全信頼のアクセス許可が必要な場合、アプリケーションがファイル アクセス許可を要求した場合、ファイル アクセス許可のみが付与され、完全信頼アクセス許可は付与されません。 ClickOnce アプリケーションを開発するときは、アプリケーションに必要な特定のアクセス許可のみを要求する必要があります。 ほとんどの場合、インターネットまたはローカル イントラネット ゾーンを使用して、アプリケーションを部分信頼に制限できます。 詳細については、「 方法: ClickOnce アプリケーションのセキュリティ ゾーンを設定する」を参照してください。 アプリケーションにカスタム アクセス許可が必要な場合は、カスタム ゾーンを作成できます。 詳細については、「 方法: ClickOnce アプリケーションのカスタム アクセス許可を設定する」を参照してください。
注
ClickOnce for .NET Core および .NET 5 以降では、コード アクセス セキュリティはサポートされていません。 .NET Framework では、コード アクセス セキュリティの使用はベスト プラクティスではなく、推奨されません。
アプリケーションの展開元ゾーンの既定のアクセス許可セットに含まれていないアクセス許可を含めると、エンド ユーザーはインストール時または更新時にアクセス許可を付与するように求められます。 ユーザーにメッセージが表示されないようにするために、システム管理者は、特定のアプリケーション発行元を信頼できるソースとして定義する ClickOnce 配置ポリシーを指定できます。 このポリシーが展開されているコンピューターでは、アクセス許可が自動的に付与され、ユーザーにプロンプトは表示されません。
開発者は、アプリケーションが適切なアクセス許可で実行されるようにする必要があります。 実行時にアプリケーションがゾーン外のアクセス許可を要求すると、セキュリティ例外が発生する可能性があります。 Visual Studio を使用すると、ターゲット セキュリティ ゾーンでアプリケーションをデバッグでき、セキュリティで保護されたアプリケーションの開発に役立ちます。 詳細については、「 System.Deployment.Application を使用する ClickOnce アプリをデバッグする」を参照してください。
コード アクセス セキュリティと ClickOnce の詳細については、「 ClickOnce アプリケーションのコード アクセス セキュリティ」を参照してください。
コード署名証明書
ClickOnce 配置を使用してアプリケーションを発行するには、公開キーと秘密キーのペアを使用して、アプリケーションのアプリケーション マニフェストと配置マニフェストに署名できます。 マニフェストに署名するためのツールは、プロジェクト デザイナーの [署名] ページで使用できます。 詳細については、 署名ページ、プロジェクト デザイナーを参照してください。
マニフェストが署名されると、Authenticode 署名に基づく発行元情報がインストール時のアクセス許可ダイアログ ボックスにユーザーに表示され、アプリケーションが信頼できるソースから送信されたことをユーザーに表示します。
ClickOnce と証明書の詳細については、「 ClickOnce と Authenticode」を参照してください。
ASP.NET のフォームベース認証
各ユーザーがアクセスできる配置を制御する場合は、Web サーバーに配置されている ClickOnce アプリケーションへの匿名アクセスを有効にしないでください。 代わりに、Windows 認証を使用して、ユーザーの ID に基づいてインストールした展開へのユーザー アクセスを有効にします。
ClickOnce は永続的な Cookie を使用するため、フォーム ベースの認証 ASP.NET サポートしていません。これらは、ブラウザーキャッシュに存在し、ハッキングされる可能性があるため、セキュリティリスクを提示します。 そのため、ClickOnce アプリケーションを配置する場合、Windows 認証以外の認証シナリオはサポートされません。
引数を渡す
ClickOnce アプリケーションに引数を渡す必要がある場合は、セキュリティに関する追加の考慮事項が発生します。 ClickOnce を使用すると、開発者は Web 経由で配置されたアプリケーションにクエリ文字列を指定できます。 クエリ文字列は、アプリケーションの起動に使用される URL の末尾にある一連の名前と値のペアの形式をとります。
http://servername.adatum.com/WindowsApp1.application?username=joeuser
既定では、クエリ文字列引数は無効になっています。 これらを有効にするには、 trustUrlParameters
属性をアプリケーションの配置マニフェストで設定する必要があります。 この値は、Visual Studio と MageUI.exeから設定できます。 クエリ文字列の受け渡しを有効にする方法の詳細な手順については、「 方法: オンライン ClickOnce アプリケーションでクエリ文字列情報を取得する」を参照してください。
クエリ文字列を介して取得した引数は、引数をチェックせずにデータベースまたはコマンド ラインに渡して、それらが安全であることを確認しないでください。 安全でない引数は、悪意のあるユーザーがアプリケーションを操作して任意のコマンドを実行できるようにする可能性のあるデータベースまたはコマンド ラインエスケープ文字を含む引数です。
注
起動時に ClickOnce アプリケーションに引数を渡す唯一の方法は、クエリ文字列引数です。 コマンド ラインから ClickOnce アプリケーションに引数を渡すことはできません。
難読化済みアセンブリのデプロイメント
Visual Studio には無料の PreEmptive Protection - Dotfuscator Community が含まれています。これは、コード難読化とアクティブな保護メジャーを使用して ClickOnce アプリケーションを保護するために使用できます。 詳細については、 Dotfuscator コミュニティ ユーザー ガイドの ClickOnce セクションを参照してください。