.NET ist „Security“ Parameter für Berechtigungen Grundlegendes

stimmen
5

Kann jemand den Sinn und Zweck des Wertes für die Security Enum erklären?

Die MSDN-Seite ist nicht sehr klar. Er sagt Linkdemand tritt bei Just-in-Time-Kompilierung während der Nachfrage zur Laufzeit auftritt.

Warum die Unterscheidung und in welchen Situationen würde ich Linkdemand im Gegensatz zu fordern?

Ebenso, was sind die Anwendungsfälle der anderen interessanten Werten wie InheritenceDemand, Assert und PermitOnly.

Veröffentlicht am 09/12/2008 um 20:42
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
19

Linkdemand erfordert grundsätzlich die anrufende Code die angegebene Berechtigung zu haben. Die Nachfrage auf der anderen Seite erfordert die Telefonvorwahl nicht nur die angegebene Berechtigung haben, aber auch den Code, der die Berufung Code genannt, und den Code, der so genannt, und so weiter, den ganzen Weg nach oben den Stapel (oder bis ein assert gefunden wird, siehe unten).

Linkdemand kann JIT Kompilierung durchgesetzt werden, denn wenn der JIT-Compiler eine Aussage trifft, die eine Methode mit einem Linkdemand aufruft, kann es sofort festzustellen, ob der aufrufende Code die Berechtigung hat oder nicht. Die Nachfrage hat zu jeder Zeit während der Laufzeit durchgesetzt wird mit einem Aufruf der Methode gemacht wird, weil es nicht möglich, bei der Kompilierung zu wissen, was bei einem bestimmten Anruf auf dem Stapel sein wird. Als solches ist Linkdemand viel effizienter. der Kompromiss für Allerdings ist diese Effizienz weniger Sicherheit. Mit Linkdemand, werden Sie darauf vertrauen, dass der anrufende Code wird nicht ITS Telefonvorwahl lassen (die möglicherweise die Erlaubnis nicht hat) nutzt es für bösartige Zwecke. (Mit anderen Worten: Sie vertrauen darauf, dass es keine Sicherheitslücken im Telefonvorwahl, die ihre Anrufer ausnutzen können Zugriff erlangen indirekt mit dem Verfahren mit dem Linkdemand.) Mit Demand,

Assert ist im Grunde ein Kurzschluss für die Nachfrage. Die Sicherheitsüberprüfung, die mit Nachfrage geschieht stoppt, wenn ein Anrufer auf dem Stapel eine aktive Assert hat (in anderen Worten, nur die Anrufer im Stapel bis zum Assert haben die Erlaubnis haben). So, wie Linkdemand, müssen Sie darauf vertrauen, dass der Code mit dem Assert kann nicht durch seine Anrufer ausgenutzt werden.

Verweigern ist auch ein Kurzschluss für die Nachfrage, sondern eine Erlaubnis der Geltendmachung annulliert es eine Genehmigung aus, die ein Anrufer haben könnte. Sie würden dies, indem sichergestellt mögliche Sicherheitslöcher zu helfen, verwenden zu verhindern, dass keine Fremd Berechtigungen sind in der Tat während eines Anrufs, die ausgenutzt werden könnten.

PermitOnly ist wie zu Verweigern, außer, statt eine spezifische Erlaubnis verweigert spezifiziert jede Erlaubnis mit Ausnahme der leugnet.

InheritanceDemand, im Gegensatz zu dem anderen, nicht direkt auf Methodenaufrufe im Zusammenhang, sagt aber, dass eine Klasse, die nicht die Berechtigung verfügt, kann nicht von der Klasse mit dem InheritanceDemand erben. Dies könnte verwendet werden, zum Beispiel von nicht vertrauenswürdigem Code zu stoppen Zugriff auf geschützte Mitglieder der Klasse zu gewinnen, die sonst zugänglich abgeleiteten Klassen sein würden.

Beantwortet am 09/12/2008 um 22:56
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more