.NET 4, AllowPartiallyTrustedCallers-Attribut und Sicherheitsmerkmalen wie SecurityCritical
Ich bin neu in C# und versuche zu verstehen, die neue Sicherheits-features .NET-4.
Füllen Sie einige details, ich bin derzeit versucht, zu aktualisieren AutofacContrib.Moq arbeiten mit den neuesten Moq. Ich hatte keine Probleme dabei .NET 3.5 und unter. Aber in .NET-4 die Sicherheits-Restriktionen dazu führen, dass zahlreiche Sicherheit Ausnahmen.
Moq verfügt über eine einzelne Methode, GetObjectData
, das ist gekennzeichnet mit dem SecurityCritical Attribut. AutofacContrib.Moq ist die AllowPartiallyTrustedCallers - Attribut festgelegt, die die Quelle der Ausnahmen. Es scheint, dass, anstatt das hinzufügen der SecurityRules
Attribut mit einem Sicherheitslevel von 1, würde ich besser entfernen AllowPartiallyTrustedCallers
Attribut. Ich glaube, das macht die Montage SecurityTransparent standardmäßig, die möglicherweise nicht ausreichend sein (wenn die AutofacContrib.Moq unit-tests pass).
Meine wichtigste Frage im moment ist, ob assemblies für .NET-4 sollte jemals das AllowPartiallyTrustedCallers-Attribut? Aber angesichts der Tatsache, dass ich definitiv nicht alles verstehen noch nicht, welche details berücksichtigt werden sollte bei der Arbeit mit Baugruppen, die von Sicherheit geprägt? Muss ich explizit Kennzeichnen meine Montage mit Sicherheits-Attribute in den Orten, die Sie verwendet, direkt oder indirekt, etwas, das markiert SecurityCritical
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig: in .NET 4, sodass die APTCA-es macht die Montage SecurityTransparent, und das kann, was Ihnen Kummer.
Dem MSDN-Artikel Migration von APTCA-Assembly in die .NET Framework 4 hat sich eine gute Diskussion und Erläuterung der änderungen des AllowPartiallyTrustedCallersAttribute in .NET 4.
Speziell:
Und...
(Es ist wirklich ein guter Artikel, der Autor Mike Rousos hat einen tollen job mit. Ich möchte Sie ermutigen, Lesen Sie es in seiner Gesamtheit.)
Wenn Sie beginnen eine neue .NET-4-Bibliothek, ist es wahrscheinlich am besten stick mit der .NET 4 security-Modell und verwenden Sie die entsprechende SecurityCritical, SecuritySafeCritical, und SecurityTransparent-Attribute, wo nötig. Sie sind viel einfacher zu verwalten und zu verstehen, als alten code access security.
Wenn Sie die Migration einer alten Bibliothek auf das neue Modell, da gibt es ein gutes Beispiel im Artikel, wie zu tun... aber im Grunde ist es beläuft sich auf das entfernen Alter LinkDemands und hinzufügen [SecurityCritical] an Ihrer Stelle.
In Ihrem speziellen Fall, die Schnellste Weg zu gehen, wäre, den SecurityRules-Attribut, so bekommen Sie das alte Verhalten, aber ich bin mir nicht sicher, ich würde berücksichtigen, dass die Recht Weg. Der richtige Weg wäre wahrscheinlich zu verlieren, die APTCA und fügen Sie SecurityCritical auf die Montage denn die Montage enthalten kann SecurityCritical, dann markieren Sie die verschiedenen Typen, die rufen SecurityCritical (z.B. Sachen, die Verweise GetObjectData) mit SecuritySafeCritical so Ihre SecurityTransparent-code aufgerufen werden kann. Natürlich, dass der zweite Ansatz wird eine Menge mehr Arbeit, so dass Sie wahrscheinlich wollen, zu laufen SecAnnotate.exe und einige automatisierte Tipps.
Blick auf die Moq Stamm, eine Suche für die GetObjectData-zeigt, dass die Methode in Frage, die override für eine Ausnahme Serialisierungs-Mechanismus (ISerializable.GetObjectData-System.Ausnahme), die nur SecurityCritical-code aufrufen wird sowieso, also können Sie gar nicht laufen in irgendwelche Probleme, wenn Sie nur verlieren APTCA und markieren Sie die Baugruppe SecurityCritical.
Es gibt eine Meldung auf Autofac zu aktualisieren, um die neuesten Sicherheits-Modell. Wenn Sie die Idee mögen, gehen Sie abstimmen/kommentieren.
Sorry das war keine kurze Antwort. Sicherheit ist leider nie einfach. :S