Ограничение доступных типов / пространств имен с CSharpCompilation - PullRequest
1 голос
/ 23 марта 2020

Наше приложение анализирует и компилирует пользовательский ввод как код C#, и это вызывает некоторые проблемы с безопасностью. Обычно пользователь создает выражения, используя операторы и функции basi c arithmeti c из математической библиотеки. Однако также можно написать выражение, которое выполняет произвольный код, если оно возвращает ожидаемый тип.

ex. new System.Threading.Thread(<malicious code>).ManagedThreadId

Мы используем класс CSharpCompilation вместе с методами stati c из SyntaxFactory для компиляции выражений.

По сути, мне нужен какой-то способ ограничить то, что типы или методы, которые можно использовать в выражениях. Моей первой мыслью было использование подхода «черный список / белый список», но я не знаком с пространством имен CodeAnalysis и надеялся, что кто-то может указать мне правильное направление.

Было бы также здорово, если бы кто-то мог объяснить мне как приведенный выше пример успешно компилируется, если к экземпляру CSharpCompilation не добавлена ​​ссылка на System.Threading?

...