Aufspüren des Attributs AllowPartiallyTrusted Callers (APTC)
Veröffentlicht: 14. Mrz 2003 | Aktualisiert: 23. Jun 2004
Von Mathias Schiffer
Im Zusammenhang mit dem neuen Sicherheitsmodell von .NET kommt dem Attribut AllowPartiallyTrustedCallers besondere Bedeutung zu: Sobald eine Assembly mit einem Strong Name versehen ist, prüft die CLR, ob die aufrufende Assembly voll vertrauenswürdig ist.
Anders ausgedrückt: Es wird geprüft, ob die aufrufende Assembly dem PermissionSet "Full Trust" angehört. Ist dies nicht der Fall, wird sie als nicht voll vertrauenswürdig eingestuft ("partially trusted") und der Aufruf blockiert. Sie erkennen diesen Umstand übrigens an einer Exception vom Typ System.Security.Exception mit der Fehlermeldung "Request failed".
Die nachfolgenden Codezeilen bilden die Basis für ein Utility, das die von Microsoft ausgelieferten Framework-Assemblies auf dieses Attribut hin überprüft und Ihnen so hilft, mögliche Stolpersteine frühzeitig zu erkennen.
' Vorausgesetzte Imports-Direktiven: Imports System Imports System.IO Imports System.Reflection Imports System.Collections Imports System.Web ' Referenz auf: System.Web.dll ' ("Project" | "Add Reference") Function GetAPTC() As ArrayList Dim found As ArrayList = New ArrayList() Dim fi As FileInfo Dim asm As [Assembly] ' DLL-Dateien im CLR-Verzeichnis ermitteln For Each fi In New DirectoryInfo( _ HttpRuntime.ClrInstallDirectory).GetFiles("*.dll") Try asm = [Assembly].LoadFrom(fi.FullName) If asm.GetName().GetPublicKeyToken() Is Nothing Then ' Dieser Sonderfall sollte eigentlich nie eintreten! Console.WriteLine("Kein Public Key Token in Assembly " _ & fi.Name & " gefunden!") found.Add (fi.Name) Else If asm.IsDefined(Type.GetType( _ "System.Security.AllowPartially" _ & "TrustedCallersAttribute"), False) Then found.Add (fi.Name) End If End If ' GetPublicKeyToken Is Nothing Catch End Try Next Return found End Function
Zur Nutzung dieses Codebeispiels iterieren Sie einfach über die von GetAPTC zurückgegebene ArrayList, beispielsweise zwecks Ausgabe:
Sub Main() Dim s As String Dim ar As ArrayList = GetAPTC() For Each s In ar Console.WriteLine (s) Next End Sub
Weitere Informationen zu AllowPartiallyTrustedCallers
Weitere Informationen zu diesem Attribut finden sie in der MSDN Library unter
https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/aptcatypes.asp