Sichern von ClickOnce-Anwendungen

ClickOnce-Anwendungen unterliegen in .NET Framework Einschränkungen in Bezug auf die Codezugriffssicherheit, um den Zugriff zu begrenzen, den Code auf geschützte Ressourcen und Vorgänge hat. Daher ist es wichtig, dass Sie sich mit dem Thema Codezugriffssicherheit auseinandersetzen und diese Kenntnisse beim Schreiben von ClickOnce-Anwendungen anwenden. Die Anwendungen können Zonen mit voller Vertrauenswürdigkeit oder teilweise vertrauenswürdige Zonen verwenden, z. B. die Internet- und Intranetzonen, um den Zugriff einzuschränken.

Außerdem verwendet ClickOnce Zertifikate, um die Echtheit des Herausgebers einer Anwendung zu überprüfen und die Anwendungs- und Bereitstellungsmanifeste zu signieren. Auf diese Weise wird sichergestellt, dass die Dateien nicht manipuliert wurden. Das Signieren ist ein optionaler Schritt, der das Ändern der Anwendungsdateien nach dem Generieren der Manifeste vereinfacht. Ohne signierte Manifeste ist es jedoch schwierig sicherzustellen, dass das Installationsprogramm der Anwendung nicht durch Man-in-the-middle-Sicherheitsangriffe manipuliert wird. Aus diesem Grund wird empfohlen, das Anwendungs- und Bereitstellungsmanifest zu signieren, um die Anwendungen zu schützen.

Zones

Anwendungen, die mit ClickOnce-Technologie bereitgestellt werden, sind auf einen Berechtigungssatz und Aktionen beschränkt, die von der Sicherheitszone definiert werden. Sicherheitszonen werden im Browser definiert und basieren auf dem Speicherort der Anwendung. In der folgenden Tabelle werden die Standardberechtigungen aufgelistet, die auf dem Bereitstellungsspeicherort beruhen:

Bereitstellungsort Sicherheitszone
Ausführen vom Web Internetzone
Installieren vom Web Internetzone
Installieren aus einer Dateifreigabe im Netzwerk Zone "Lokales Intranet"
Installieren von CD-ROM Voll vertrauenswürdig

Die Standardberechtigungen basieren auf dem Speicherort, von dem aus die Originalversion der Anwendung bereitgestellt wurde. Updates der Anwendung erben diese Berechtigungen. Falls die Anwendung so konfiguriert ist, dass sie an einem Web- oder Netzwerkspeicherort nach Updates sucht und eine neuere Version zur Verfügung steht, kann die ursprüngliche Installation statt der Berechtigung Volle Vertrauenswürdigkeit u. U. Berechtigungen für die Internet- oder Intranetzone erhalten. Um zu verhindern, dass Benutzer Eingabeaufforderungen erhalten, kann ein Systemadministrator eine ClickOnce-Bereitstellungsrichtlinie angeben, die einen bestimmten Anwendungsherausgeber als vertrauenswürdige Quelle definiert. Für Computer, auf denen diese Richtlinie bereitgestellt wurde, werden Berechtigungen automatisch gewährt, und es werden keine Aufforderungen an Benutzer ausgegeben. Weitere Informationen finden Sie unter Trusted Application Deployment Overview. Um die Bereitstellung vertrauenswürdiger Anwendungen zu konfigurieren, kann das Zertifikat auf Computer- oder Unternehmensebene installiert werden. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen eines vertrauenswürdigen Herausgebers zu einem Clientcomputer für ClickOnce-Anwendungen.

Hinweis

In ClickOnce für .NET Core und .NET 5 oder höher wird dieses Feature nicht unterstützt. Weitere Informationen finden Sie unter ClickOnce für .NET.

Richtlinien der Codezugriffssicherheit

Berechtigungen für eine Anwendung werden von den Einstellungen im <trustInfo>-Element des Anwendungsmanifests vorgegeben. Visual Studio generiert diese Informationen automatisch basierend auf den Einstellungen auf der Eigenschaftenseite Sicherheit des Projekts. Einer ClickOnce-Anwendung werden nur die speziellen Berechtigungen gewährt, die diese anfordert. Wenn für den Dateizugriff beispielsweise Berechtigungen für volle Vertrauenswürdigkeit erforderlich sind und die Anwendung eine Dateizugriffsberechtigung anfordert, wird ihr nur eine Berechtigung für den Dateizugriff und keine volle Vertrauenswürdigkeit gewährt. Beim Entwickeln der ClickOnce-Anwendung sollten Sie sicherstellen, dass Sie nur die spezifischen Berechtigungen anfordern, die für die Anwendung erforderlich sind. In den meisten Fällen können Sie die Zonen "Internet" oder "Lokales Intranet" verwenden, um Ihre Anwendung auf teilweise Vertrauenswürdigkeit zu beschränken. Weitere Informationen finden Sie unter Vorgehensweise: Festlegen einer Sicherheitszone für eine ClickOnce-Anwendung. Wenn die Anwendung benutzerdefinierte Berechtigungen erfordert, können Sie eine benutzerdefinierte Zone erstellen. Weitere Informationen finden Sie unter Vorgehensweise: Festlegen von benutzerdefinierten Berechtigungen für eine ClickOnce-Anwendung.

Hinweis

In ClickOnce für .NET Core und .NET 5 oder höher wird dieses Feature nicht unterstützt. Weitere Informationen finden Sie unter ClickOnce für .NET.

Das Einschließen einer Berechtigung, die nicht zum Standardberechtigungssatz der Zone gehört, aus der die Anwendung bereitgestellt wird, führt dazu, dass der Endbenutzer bei der Installation oder bei einem Update zum Gewähren der Berechtigung aufgefordert wird. Um zu verhindern, dass Benutzer Eingabeaufforderungen erhalten, kann ein Systemadministrator eine ClickOnce-Bereitstellungsrichtlinie angeben, die einen bestimmten Anwendungsherausgeber als vertrauenswürdige Quelle definiert. Auf Computern, auf denen diese Richtlinie bereitgestellt wurde, werden Berechtigungen automatisch gewährt, und es werden keine Aufforderungen an Benutzer ausgegeben.

Als Entwickler müssen Sie sicherstellen, dass Ihre Anwendung mit den geeigneten Berechtigungen ausgeführt wird. Wenn die Anwendung während der Laufzeit Berechtigungen außerhalb einer Zone anfordert, wird ggf. eine Sicherheitsausnahme angezeigt. Visual Studio ermöglicht Ihnen das Debuggen der Anwendung in der Zielsicherheitszone. Darüber hinaus erhalten Sie Unterstützung beim Entwickeln sicherer Anwendungen. Weitere Informationen finden Sie unter Debuggen von ClickOnce-Apps, die System.Deployment.Application verwenden.

Weitere Informationen zur Codezugriffssicherheit und zu ClickOnce finden Sie unter Codezugriffssicherheit für ClickOnce-Anwendungen.

Codesignaturzertifikate

Um eine Anwendung mithilfe der ClickOnce-Bereitstellung zu veröffentlichen, können Sie die Anwendungs- und Bereitstellungsmanifeste für die Anwendung mit einem Schlüsselpaar aus öffentlichem und privatem Schlüssel signieren. Die Tools zum Signieren eines Manifests sind im Projekt-Designer auf der Seite Signierungverfügbar. Weitere Informationen finden Sie unter Signing Page, Project Designer.

Nach dem Signieren der Manifeste werden dem Benutzer während der Installation die Herausgeberinformationen auf der Grundlage der Authenticode-Signatur im Dialogfeld für Berechtigungen angezeigt, um nachzuweisen, dass die Anwendung aus einer vertrauenswürdigen Quelle stammt.

Weitere Informationen zu ClickOnce und Zertifikaten finden Sie unter ClickOnce and Authenticode.

Formularbasierte ASP.NET-Authentifizierung

Wenn Sie steuern möchten, auf welche Bereitstellung Benutzer jeweils zugreifen können, sollten Sie den anonymen Zugriff auf ClickOnce-Anwendungen verhindern, die auf einem Webserver bereitgestellt wurden. Stattdessen sollten Sie Benutzern vorrangig Zugriff auf die Bereitstellungen gewähren, die mithilfe der Windows-Authentifizierung unter der Identität des jeweiligen Benutzers installiert wurden.

ClickOnce unterstützt keine ASP.NET-Formularauthentifizierung, da ClickOnce permanente Cookies verwendet. Diese Cookies stellen ein Sicherheitsrisiko dar, weil sie im Browser-Cache gespeichert werden und von Hackern ausspioniert werden können. Wenn Sie ClickOnce-Anwendungen bereitstellen, wird daher außer Windows-Authentifizierung kein anderes Authentifizierungsszenario unterstützt.

Übergeben von Argumenten

Ein weiterer Sicherheitsaspekt muss berücksichtigt werden, wenn Sie Argumente an eine ClickOnce-Anwendung übergeben müssen. ClickOnce ermöglicht es Entwicklern, eine Abfragezeichenfolge für Anwendungen anzugeben, die über das Internet bereitgestellt werden. Die Abfragezeichenfolge besteht aus einer Reihe von Name/Wert-Paaren am Ende der URL, mit der die Anwendung gestartet wird:

http://servername.adatum.com/WindowsApp1.application?username=joeuser

Abfragezeichenfolgenargumente werden standardmäßig deaktiviert. Um sie zu aktivieren, muss das trustUrlParameters -Attribut im Bereitstellungsmanifest der Anwendung festgelegt werden. Dieser Wert kann über Visual Studio und „MageUI.exe“ festgelegt werden. Eine ausführliche Beschreibung der Schritte zum Aktivieren der Übergabe von Abfragezeichenfolgen finden Sie unter Gewusst wie: Abrufen von Abfragezeichenfolgen-Informationen in einer Online-ClickOnce-Anwendung.

Übergeben Sie Argumente, die über eine Abfragezeichenfolge abgerufen wurden, nie an eine Datenbank oder an die Befehlszeile, ohne die Argumente auf ihre Sicherheit zu überprüfen. Unsichere Argumente sind Argumente, die Datenbank- oder Befehlszeilen-Escapezeichen enthalten, mit denen böswillige Benutzer die Möglichkeit erhalten können, Ihre Anwendung für die Ausführung beliebiger Befehle zu manipulieren.

Hinweis

Abfragezeichenfolgenargumente sind die einzige Möglichkeit, Argumente beim Starten an eine ClickOnce-Anwendung zu übergeben. Über die Befehlszeile können Sie keine Argumente an eine ClickOnce-Anwendung übergeben.

Bereitstellen von verborgenen Assemblys

Visual Studio umfasst die kostenlose PreEmptive Protection – Dotfuscator Community, die Sie verwenden können, um Ihre ClickOnce-Anwendungen mithilfe von Codeobfuskation und aktiver Schutzmaßnahmen zu schützen. Weitere Informationen finden Sie im Abschnitt „ClickOnce“ des Dotfuscator Community Edition User Guide.