ClickOnce の配置とセキュリティ
更新 : 2007 年 11 月
ClickOnce テクノロジを使用して配置されるアプリケーションは、"サンドボックス" 内で実行され、セキュリティ ゾーンに基づいた限定されたアクセス許可セットを持ちます。配置場所によって異なる既定のアクセス許可を次の表に示します。
配置場所 |
セキュリティ ゾーン |
---|---|
Web からの実行 |
インターネット ゾーン |
Web からのインストール |
インターネット ゾーン |
ネットワーク ファイル共有からのインストール |
イントラネット ゾーン |
CD-ROM からのインストール |
Full Trust |
既定のアクセス許可は、アプリケーションの元のバージョンがどこから配置されたかによって異なります。このアプリケーションを更新する際、そのアクセス許可が継承されます。アプリケーションが Web またはネットワーク上の場所からの更新をチェックするように構成されていて、新しいバージョンが使用できるようになっている場合には、元のインストールが完全信頼のアクセス許可ではなく、インターネット ゾーンまたはイントラネット ゾーンのアクセス許可を継承する可能性があります。ユーザーに対する要求が行われないようにするために、システム管理者は、信頼された発行元として特定のアプリケーション発行元を定義する ClickOnce 配置ポリシーを指定できます。このポリシーが配置されるコンピュータ上では、アクセス許可は自動的に付与され、ユーザーへの要求は行われません。
セキュリティとアクセス許可
開発者は、開発するアプリケーションが適切なアクセス許可で実行されることを確認する必要があります。
メモ : |
---|
Visual Studio を使用すると、対象のセキュリティ ゾーン内部でアプリケーションをデバッグして、セキュリティで保護されたアプリケーションを開発できます。 |
ClickOnce アプリケーションには、より高いレベルのアクセス許可が必要になる場合があります。たとえば、Excel スプレッドシートと対話する必要のあるアプリケーションが、インターネット ゾーンまたはイントラネット ゾーン用に定義されているアクセス許可よりも高いアクセス許可を必要とすることがあります。アプリケーションがより高いアクセス許可を必要とする場合、ユーザーはインストール時にアクセス許可を与えるように要求されます。ユーザーが承認するとアプリケーションはインストールされ、承認しない場合、インストールは中止されます。
メモ : |
---|
ユーザーに対する要求が行われないようにするために、システム管理者は、信頼された発行元として特定のアプリケーション発行元を定義する ClickOnce 配置ポリシーを指定できます。このポリシーが配置されるコンピュータ上では、アクセス許可は自動的に付与され、ユーザーへの要求は行われません。 |
アプリケーションのアクセス許可は、そのアプリケーション マニフェストの <trustInfo> 要素 (ClickOnce アプリケーション)内の設定によって決定されます。Visual Studio は、プロジェクトのセキュリティ プロパティ ページ上に、この設定に応じたアクセス許可情報を生成します。ClickOnce アプリケーションには、アプリケーションが要求するアクセス許可だけが与えられます。たとえば、ファイルへのアクセスに完全信頼のアクセス許可が必要な場合、アプリケーションがファイルへのアクセス許可を要求すると、完全信頼ではなくファイルへのアクセス許可だけが与えられます。ClickOnce アプリケーションを開発する際には、そのアプリケーションが必要とする特定のアクセス許可のみ要求するようにします。
また、配置マニフェストは、Authenticode 署名を使用して署名されている必要があります。Authenticode 署名に基づいた発行元情報は、インストール時に [アクセス許可] ダイアログ ボックスに表示され、アプリケーションが信頼された発行元から発行されていることをユーザーに示します。Windows Software Development Kit (SDK) には、マニフェストに署名するためのファイル署名ツール (SignTool.exe) が含まれています (signcode.exe 署名ツールの使用は推奨されていません)。
メモ : |
---|
Visual Studio 2003 以前で使用できた署名機能は、セットアップおよび配置プロジェクト (セットアップ プロジェクト、Web セットアップ プロジェクト、CAB プロジェクト、マージ モジュール) から削除されました。署名を有効にした Visual Studio 2003 プロジェクトを Visual Studio 2005 にインポートした場合、または配置プロジェクトで署名を有効にする場合は、ビルド後に署名ツール (SignTool.exe) を使用してビルド出力のファイルに署名する必要があります。この方法については、「ファイル '<ファイル>' は署名されていませんでした」を参照してください。 |
ASP.NET フォーム ベースの認証
各ユーザーがアクセスできる配置を制御する場合は、Web サーバーに配置される ClickOnce アプリケーションに対する匿名アクセスを許可しないでください。代わりに Windows NT 認証を使用して、インストールした配置に対するユーザーのアクセスをユーザーの ID に基づいて許可します。
Windows NT 認証を使用しない環境に配置する場合は、解決策として ASP.NET フォーム ベースの認証を使用してユーザーを認証する方法が考えられます。ただし、ClickOnce は永続的な Cookie を使用するため、フォーム ベースの認証はサポートしません。この Cookie は Internet Explorer のキャッシュに存在し、ハックされる可能性があるため、セキュリティ上のリスクがあります。このため、ClickOnce アプリケーションを配置する場合、Windows NT 認証以外の認証シナリオはサポートされません。
引数の受け渡し
ClickOnce アプリケーションに引数を渡す必要がある場合は、さらにセキュリティ上の考慮事項があります。ClickOnce では、Web 上に配置されたアプリケーションに開発者がクエリ文字列を指定できるようになっています。クエリ文字列は、アプリケーションを起動するための URL の末尾に一連の名前と値のペアが付加された形式になっています。
http://servername.adatum.com/WindowsApp1.application?username=joeuser
既定では、クエリ文字列の引数が無効になります。これらを有効にするには、アプリケーションの配置マニフェストで trustUrlParameters 属性を設定する必要があります。この値は、Visual Studio および MageUI.exe から設定できます。クエリ文字列の受け渡しを有効にする方法の詳細については、「方法 : ClickOnce アプリケーションでクエリ文字列を取得する」を参照してください。
クエリ文字列を通じて取得された引数は、必ず安全であることを確認してからデータベースまたはコマンド ラインに渡してください。安全でない引数とは、悪意のあるユーザーがアプリケーションを操作して任意のコマンドを実行できるようにするデータベースまたはコマンド ライン エスケープ文字が含まれた引数のことです。
メモ : |
---|
クエリ文字列引数は、起動時に ClickOnce アプリケーションに引数を渡す唯一の手段です。コマンド ラインから ClickOnce アプリケーションに引数を渡すことはできません。 |
難読化されたアセンブリの配置
Dotfuscator を使用してアプリケーションを難読化し、他のユーザーがコードをリバース エンジニアリングできないようにできます。ただし、アセンブリの難読化は Visual Studio IDE または ClickOnce 配置プロセスに統合されていません。このため、難読化は、配置プロセスの外部でビルド後のステップなどを使用して実行する必要があります。プロジェクトをビルドした後に、Visual Studio の外部で次の手順を手動で実行します。
Dotfuscator を使用して難読化を実行します。詳細については、「チュートリアル : ClickOnce アプリケーションを手動で配置する」を参照してください。
Mage.exe または MageUI.exe を使用して、ClickOnce マニフェストを生成し、それらに署名します。詳細については、「マニフェストの生成および編集ツール (Mage.exe)」および「マニフェスト生成および編集ツールのグラフィカル クライアント (MageUI.exe)」を参照してください。
配置元の場所 (Web サーバー、UNC 共有、または CD-ROM) から手動でファイルを発行 (コピー) します。