2012-06-07 7 views
6

Ich habe eine .net Assembly mit einer Methode, die nicht überprüfbar ist.C# unverifiable Code ohne unmanaged Erlaubnis

Ich versuche, diese Anordnung in einer Sandbox Appdomain zu laden.

Wenn ich mit Skip Überprüfung laden, aber nicht mit Unmanaged erhalte ich eine Überprüfung Ausnahme. Wie so:

new SecurityPermission(SecurityPermissionFlag.Execution | 
         SecurityPermissionFlag.SkipVerification); 

Wenn ich lade mit unmanaged Erlaubnis, es funktioniert, aber dann wird die App-Domain nicht genug „Sandbox“ sein.

new SecurityPermission(SecurityPermissionFlag.Execution | 
         SecurityPermissionFlag.SkipVerification | 
         SecurityPermissionFlag.UnmanagedCode); 

auch - ich bin mit .NET 4 und die oben zu machen arbeiten ich wie so zu Transperancy Modell Ebene 1, wechseln hatte:

[assembly:SecurityRules(SecurityRuleSet.Level1)] 

Also, meine Frage ist:

  1. gibt es eine Möglichkeit ungeprüften Code ohne UnamangedCode Erlaubnis zu laufen.
  2. Gibt es eine Möglichkeit, die obige Arbeit mit Level2-Sicherheitsregelsatz zu arbeiten.

Vielen Dank!

+0

Eine Anwendung wird entweder Sandbox oder das nicht. Was bedeutet 'Sandkasten nicht genug 'genau? Es scheint, als müssten Sie eine Assembly ermitteln, die verifizierbar ist, anstatt zu versuchen, eine Problemumgehung zu erstellen. –

+0

In dieser Sandbox muss ich den Benutzer vor sich selbst schützen und nicht vor einer potentiellen Bedrohung. Aus diesem Grund mache ich mir keine Sorgen über nicht verifizierbaren Code. Aber ich mache mir Sorgen über Unmanaged Code. Wie auch immer, ich kann es wegen einiger .net Frameworks, die ich verwende, nicht verifizieren. – ravyoli

Antwort

1

Gibt es eine Möglichkeit, unverifizierten Code ohne UnamangedCode Erlaubnis auszuführen.

Selbst wenn es wäre, hätten Sie zu diesem Zeitpunkt keine Sicherheit mehr gegeben. Nicht verifizierbarer Code hat die gleiche Leistung wie nicht verwalteter Code. So können Sie beispielsweise das Typsystem aufbrechen.

es Sinn macht, nicht SkipVerification und nicht UnmanagedCode (oder umgekehrt) zu haben. Die beiden sind gleichwertig und ich betrachte es als einen Fehler in dem Rahmen, die beide existieren.

Verwandte Themen