Бөлісу құралы:


Безопасность и создание кода на лету

Некоторые библиотеки работают путем создания кода и запуска его для выполнения некоторых операций для вызывающего. Основная проблема заключается в создании кода под эгидой кода с меньшим доверием и его запуске с более высоким уровнем доверия. Проблема ухудшается, когда вызывающий объект может влиять на создание кода, поэтому необходимо убедиться, что создается только код, который вы считаете безопасным.

Вам нужно точно знать, какой код создается в любое время. Это означает, что у вас должны быть строгие элементы управления любыми значениями, полученными от пользователя, будь то вложенные в кавычки строки (которые должны быть экранированы, поэтому они не могут включать непредвиденные элементы кода), идентификаторы (которые следует проверить, чтобы убедиться, что они являются допустимыми идентификаторами) или что-либо другое. Идентификаторы могут быть опасными, так как компилируемая сборка может быть изменена таким образом, чтобы свои идентификаторы содержали странные символы, что, вероятно, нарушит его работу (хотя это редко является уязвимостью безопасности).

Рекомендуется генерировать код с использованием механизма отражения emit, что часто помогает избежать многих из этих проблем.

При компиляции кода учтите, может ли вредоносная программа его изменить. Существует ли небольшое окно времени, в течение которого вредоносный код может изменить исходный код на диске, прежде чем компилятор считывает его или до загрузки файла .dll? В этом случае необходимо защитить каталог, содержащий эти файлы, с помощью списка управления доступом в файловой системе, как это необходимо.

См. также