So wie der Titel sagt: Was, wenn überhaupt, sind die Sicherheitsimplikationen, die berücksichtigt werden müssen, wenn anonyme Methoden (Action<>
, Func<>
) in C# verwendet und/oder weitergegeben werden?Was sind die Sicherheitsaspekte für die Annahme anonymer Methoden (Action <>, Func <>) als Parameter?
Eine Methode, die Action<>
/Func<>
akzeptiert, scheint ein möglicher Weg für die Einspeisung von Fremdcode in ein Programm zu sein. Für die Aufzeichnung verstehe ich, dass die injizierte Methode oder Funktion nicht in der Lage ist, von Natur aus unsichere Dinge im Sinne eines willkürlichen Speicherzugriffs zu tun, aber ich würde denken, dass es dem aufrufenden Code erlauben könnte, z. willkürliche .Net-Framework-Funktionen, korrupte Daten oder auf andere Weise verursachen die Anwendung Fehlverhalten.
Ist diese Annahme falsch?
Wenn nicht, was sollte getan werden, um diese zu sperren? Gibt es außerdem eine Möglichkeit, das
/Func<>
zu validieren, das in einer Methode oder Funktion übergeben wird, um sicherzustellen, dass es eine erwartete Form aufweist oder seinen Zugriff auf bestimmte Typen und Namespaces einschränkt?
Verzeih mir auch, wenn ich nicht die richtige Terminologie verwende, lerne ich immer noch.
Beachten Sie auch, dass Sie bösartigen Code durch Vererbung (durch Überschreiben virtueller und abstrakter Methoden) und Schnittstellenimplementierung injizieren können. Aber die Antwort von SLaks gilt auch für diese Fälle. Die Klasse "System.String" zum Beispiel schützt sich davor, indem sie versiegelt wird. –
Was ist das Szenario?Vertrauenswürdiger und nicht vertrauenswürdiger Code im selben Prozess, getrennt durch CAS? – usr
@usr Ich frage wirklich, ob es * Szenarien gibt, in denen es irgendwelche Bedenken gibt. Ich habe hier einige Lösungen gesehen, die diese verwenden, um zum Beispiel einen Eigenschaften-Getter oder -Setter an eine benannte Methode zu übergeben, indem man sie in eine dieser Methoden einpackt. Aber das fühlt sich falsch an, denn meines Wissens gibt es keine Möglichkeit, dass die benannte Methode garantiert oder anderweitig dafür sorgt, dass sich die übergebene Aktion <> oder Func <> in erwarteter Weise verhält. Ist es dann eine schlechte Übung, diese als Parameter zu verwenden, es sei denn, die benannte Methode kümmert sich wirklich nicht darum, was sie tut? Z.B. Assert.ThrowsException(). –