Schreiben von sicheren verwalteten Steuerelementen

Verwaltete Steuerelemente sind Assemblys, auf die von Webseiten verwiesen wird, die auf den Computer des Benutzers gedownloadet und bei Bedarf ausgeführt werden. Aus Sicht der Codezugriffssicherheit gibt es zwei Arten von verwalteten Steuerelementen: solche, die unter der Standardsicherheitsrichtlinie ausführbar sind, und solche, die eine höhere Vertrauenswürdigkeit erfordern.

Zum Schreiben verwalteter Steuerelemente, die unter den Standardsicherheitsrichtlinien ausgeführt werden sollen, müssen Sie lediglich wissen, welche Operationen von den Standardsicherheitsrichtlinien für die Intranet- bzw. die Internetzone zugelassen werden. Wenn für die Ausführung eines verwalteten Steuerelements nicht mehr Berechtigungen erforderlich sind, als es aufgrund seiner Ursprungszone erhält, wird es ausgeführt. Beachten Sie, dass ein Administrator oder ein Benutzer u. U. Code aus der Internet- bzw. der Intranetzone keine ausreichenden Berechtigungen erteilt. Zum Ausführen verwalteter Steuerelemente, bei denen eine höhere Ebene der Vertrauenswürdigkeit erforderlich ist, muss der Administrator bzw. Benutzer die Sicherheitsrichtlinien des Computers anpassen, auf dem der Code ausgeführt werden soll.

Soweit möglich, sollten verwaltete Steuerelemente so geschrieben werden, dass für sie keine Berechtigung erforderlich ist, die Code aus dem Internet bzw. Intranet in der Standardeinstellung nicht erteilt wird. Für die Internetzone bedeutet dies, dass Code auf das Anzeigen von SafeTopLevelWindows- und SafeSubWindows-Fenster beschränkt ist (mit dem Sicherheitssystem versehen, um das Vortäuschen von Systemdialogen zu verhindern), dass lediglich die Kommunikation mit der Ursprungssite möglich ist und beschränkter, isolierter Speicher verwendet wird.

Für Code im Intranet gelten geringfügig weiter reichende Berechtigungen. Ausführliche Informationen finden Sie unter Die standardmäßigen Sicherheitsrichtlinien. Wenn das Steuerelement auf Dateien zugreifen, Datenbanken verwenden, Informationen über den Clientcomputer sammeln und andere Vorgänge ausführen muss, ist ein höheres Maß an Vertrauenswürdigkeit erforderlich.

Entwicklung

Steuerelemente mit hoher Vertrauenswürdigkeit sollen unter Sicherheitsrichtlinien ausgeführt werden, die weniger restriktiv sind, als üblicherweise durch ihren Ursprung (Intranet oder das Internet) gewährleistet ist. Die meisten durch sichere Bibliotheken wie .NET Framework-Klassen ausgeführten Berechtigungsforderungen führen Stackwalks durch, bei denen alle Aufrufer überprüft werden. Dies soll sicherstellen, dass den Aufrufern die geforderten Berechtigungen erteilt wurden und dass Webseiten, nicht jedoch verwalteter Code, aus Sicherheitsgründen als Aufrufer behandelt werden. Stackwalks sollen verhindern, dass weniger vertrauenswürdiger Code hoch vertrauenswürdigen Code täuscht und schädliche Operationen ausgeführt werden.

Da verwaltete Steuerelemente in einem Browser durch Active Script auf einer Webseite geändert werden können, gilt die betreffende Webseite als Aufrufer. Sie wird während eines Sicherheitsstackwalks überprüft, um den Missbrauch hoch vertrauenswürdigen Codes durch böswillige Autoren von Webseiten zu verhindern. Da eine Webseite als Aufrufer behandelt wird, darf ein von einer Webseite ausgeführtes Steuerelement, dem wegen seines starken Namens oder aufgrund des Herausgeberzertifikats eine hohe Vertrauenswürdigkeit zugewiesen wurde, keine Operationen ausführen, die für Code aus derselben Zone wie diese Webseite (Intranet oder Internet) normalerweise unzulässig sind. Weitere Informationen zum Thema Bereitstellung finden Sie im nächsten Abschnitt. Auf den ersten Blick mag es so erscheinen, dass das Schreiben von Steuerelementen mit hoher Vertrauenswürdigkeit somit nicht möglich ist. Jedoch können Sie in diesem Szenario das Verhalten des Sicherheitsstackwalks mithilfe von Codezugriffssicherheit selektiv außer Kraft setzen.

Steuerelemente mit hoher Vertrauenswürdigkeit müssen Asserts vernünftig verwenden, um Stackwalks für Berechtigungen zu umgehen, die den Aufrufern (die Webseiten, von denen sie ausgeführt wurden) i. d. R. nicht gewährt werden. Bei der Verwendung von Asserts müssen Sie sorgfältig darauf achten, dass Sie keine gefährlichen APIs verfügbar machen, die schädlichen Webseiten das Ausführen unzulässiger Operationen ermöglichen. Daher müssen Sie beim Schreiben hoch vertrauenswürdiger Steuerelemente das gleiche Maß an Sorgfalt und Sicherheitsbewusstsein walten lassen wie beim Erstellen einer sicheren Klassenbibliothek.

Im Folgenden werden einige Tipps für das Erstellen sicher verwalteter Steuerelemente aufgeführt:

  • Sofern möglich, sollten Sie die Operationen kapseln, die eine hohe Vertrauenswürdigkeit erfordern, sodass sie durch das Steuerelement nicht verfügbar gemacht werden. Auf diese Weise können Sie die für diese Operationen erforderlichen Berechtigungen als Assertion anfordern und sicher sein, dass Webseiten, die das Steuerelement verwenden, die entsprechenden Funktionen nicht missbrauchen können.

  • Wenn der Entwurf des Steuerelements ein Verfügbarmachen der von diesem ausgeführten Operationen mit hoher Vertrauenswürdigkeit erfordert, nehmen Sie ggf. eine Berechtigungsforderung für die Site- oder URL-Identität vor, um sicherzustellen, dass das Steuerelement nur von den Webseiten aufgerufen werden kann, von denen es ausgeführt werden soll.

Bereitstellung

Steuerelemente mit hoher Vertrauenswürdigkeit müssen immer einen starken Namen aufweisen oder mit einem Herausgeberzertifikat (X.509) signiert sein. Dadurch können Richtlinienadministratoren diesen Steuerelementen eine höhere Vertrauenswürdigkeit gewähren, ohne dass dabei deren Sicherheit hinsichtlich anderen Codes aus dem Intranet oder Internet verringert wird. Nach dem Signieren der Assembly muss der Benutzer eine neue Codegruppe erstellen, der die erforderlichen Berechtigungen zugeordnet sind, und festlegen, dass ausschließlich solcher Code Mitglied der Codegruppe sein darf, der durch die Organisation bzw. das Unternehmen des Benutzers signiert ist. Nachdem die Sicherheitsrichtlinien auf diese Weise geändert wurden, erhält das Steuerelement mit hoher Vertrauenswürdigkeit die erforderliche Berechtigung für die Ausführung.

Da die Sicherheitsrichtlinien geändert werden müssen, um das Ausführen von gedownloadeten Steuerelementen mit hoher Vertrauenswürdigkeit zu ermöglichen, kann dieser Steuerelementtyp im Intranet einer Organisation leichter bereitgestellt werden. In diesem gibt ein Organisationsadministrator i. d. R. die beschriebenen Richtlinienänderungen an mehrere Clientcomputer weiter. Damit Steuerelemente mit hoher Vertrauenswürdigkeit von Benutzern ohne besondere Unternehmens- oder Organisationsbindung im Internet verwendet werden können, muss zwischen dem Herausgeber des Steuerelements und dem jeweiligen Benutzer ein Vertrauensverhältnis bestehen. Schließlich muss der Benutzer den Anweisungen des Herausgebers zustimmen, um die Richtlinien ändern und das Steuerelement mit hoher Vertrauenswürdigkeit ausführen zu können. Andernfalls ist die Ausführung des Steuerelements nicht möglich.

Siehe auch

Konzepte

Einführung in die Codezugriffssicherheit
Erstellen von sicheren Klassenbibliotheken
Die standardmäßigen Sicherheitsrichtlinien

Weitere Ressourcen

Erstellen und Verwenden von Assemblys mit starkem Namen
Verwaltung der Sicherheitsrichtlinien