Zabezpieczenia i generowanie kodu na bieżąco

Niektóre biblioteki działają przez generowanie kodu i uruchamianie go w celu wykonania operacji dla elementu wywołującego. Podstawowym problemem jest generowanie kodu w imieniu kodu o mniejszym zaufaniu i uruchamianie go w większym zaufaniu. Problem pogarsza się, gdy obiekt wywołujący może wpływać na generowanie kodu, dlatego należy upewnić się, że generowany jest tylko kod, który uważasz za bezpieczny.

Musisz wiedzieć dokładnie, jaki kod generujesz przez cały czas. Oznacza to, że musisz mieć ścisłe kontrolki dotyczące wszystkich wartości uzyskanych od użytkownika, czy są to ciągi ujęte w cudzysłów (które powinny zostać uniknięci, aby nie mogły zawierać nieoczekiwanych elementów kodu), identyfikatory (które należy sprawdzić, aby sprawdzić, czy są prawidłowymi identyfikatorami) lub cokolwiek innego. Identyfikatory mogą być niebezpieczne, ponieważ można zmodyfikować skompilowany zestaw, aby jego identyfikatory zawierały dziwne znaki, co prawdopodobnie spowoduje jego przerwanie (chociaż rzadko jest to luka w zabezpieczeniach).

Zaleca się wygenerowanie kodu z emitem odbicia, co często pomaga uniknąć wielu z tych problemów.

Podczas kompilowania kodu należy rozważyć, czy istnieje jakiś sposób, w jaki złośliwy program może go zmodyfikować. Czy istnieje mały przedział czasu, w którym złośliwy kod może zmienić kod źródłowy na dysku, zanim kompilator go odczytuje lub zanim kod ładuje plik .dll? Jeśli tak, należy odpowiednio chronić katalog zawierający te pliki przy użyciu listy kontroli dostępu w systemie plików.

Zobacz też