Freigeben über


Sicherheit und On-the-Fly-Codegenerierung

Einige Bibliotheken funktionieren, indem sie Code generieren und ausführen, um einen bestimmten Vorgang für den Nutzer durchzuführen. Das Grundproblem besteht darin, Code auf Veranlassung eines weniger vertrauenswürdigen Codes zu generieren und den generierten Code mit einer höheren Vertrauensebene auszuführen. Das Problem verschlechtert sich, wenn der Aufrufer die Codegenerierung beeinflussen kann, daher müssen Sie sicherstellen, dass nur Code generiert wird, den Sie als sicher betrachten.

Sie müssen genau wissen, welchen Code Sie jederzeit generieren. Dies bedeutet, dass Sie strenge Kontrollen für alle Werte haben müssen, die Sie von einem Benutzer erhalten, sei es die in Anführungszeichen eingeschlossenen Zeichenketten (die escaped werden sollten, damit sie keine unerwarteten Codeelemente enthalten können), Bezeichner (die überprüft werden sollten, damit sie gültige Bezeichner sind) oder etwas anderes. Bezeichner können gefährlich sein, da eine kompilierte Assembly so geändert werden kann, dass ihre Bezeichner seltsame Zeichen enthalten, was sie wahrscheinlich unterbricht (obwohl dies selten eine Sicherheitslücke ist).

Es wird empfohlen, dass Sie Code mit Reflektionsausgabe generieren, wodurch sich viele dieser Probleme vermeiden lassen.

Wenn Sie den Code kompilieren, überlegen Sie, ob es eine Möglichkeit gibt, dass ein bösartiges Programm ihn ändern könnte. Gibt es ein kleines Zeitfenster, in dem bösartiger Code Quellcode auf dem Datenträger ändern kann, bevor der Compiler sie liest oder bevor der Code die .dll Datei lädt? Wenn ja, müssen Sie das Verzeichnis, das diese Dateien enthält, mithilfe einer Zugriffssteuerungsliste im Dateisystem entsprechend schützen.

Siehe auch