Ich habe in der PowerShell mit Hashtabellen herumgespielt und dabei merkwürdiges Verhalten beim Zugriff auf Elemente festgestellt. Wie wir wissen, ermöglicht PowerShell mindestens drei verschiedene Möglichkeiten, Hash-Tabelleneinträgen Werte zuzuweisen:
%Vor% In der Zwischenzeit verwenden wir die # 3-Syntax, um auf die Eigenschaften des Hashtable-Objekts selbst zuzugreifen, z. B. Count
, Keys
, Values
usw. Und wenn wir ein Element mit dem Schlüssel hinzufügen, der mit dem Konflikt in Konflikt steht Name einer internen Eigenschaft, PowerShell ermöglicht uns dies, und wir können den Wert der Eigenschaft effektiv nicht mehr lesen (außer Reflection).
Ich nehme an, dass in einer Situation, in der die Schlüssel aus einer nicht vertrauenswürdigen Quelle stammen (z. B. von einer externen Datei oder einem Netzwerk), dies unerwünschte Auswirkungen auf die Flusskontrolle hat und wahrscheinlich von einem böswilligen Benutzer ausgenutzt werden kann.
Dieses Snippet zeigt das Problem:
%Vor%Ausgabe:
%Vor% Frage : Gibt es eine Möglichkeit, sich vor diesem Problem zu schützen, es sei denn, Sie überprüfen jeden Schlüssel vor der Zuweisung manuell und / oder verwenden Reflection überall im Code, wenn wir auf den Wert von Hashtable
zugreifen müssen. Eigenschaft?
In diesem Szenario können Sie wie folgt auf die Eigenschaft count der Hashtable zugreifen:
%Vor%Das erweiterte Typsystem in PowerShell bietet verschiedene Ansichten auf ein Objekt über diese PS * -Eigenschaften. Weitere Informationen finden Sie in der PowerShell-Team-Blogpost für Details.
Tags und Links security powershell