CSharpCodeProvider - это злоупотребляет? - PullRequest
7 голосов
/ 13 июня 2010

Извиняюсь за краткость вопроса, однако я не думаю, что он требует особой проработки.

Есть ли какие-либо последствия для безопасности, вызванные использованием CSharpCodeProvider и может ли это открыть сервер для атаки?

Ответы [ 3 ]

5 голосов
/ 13 июня 2010

Зависит от того, как вы его используете. Вот сводка, отсортированная от безопасного использования к использованию, которое вы, безусловно, не хотите разрешать (при запуске кода на сервере или в какой-либо среде, которую вы хотите контролировать):

  • Если вы используете CSharpCodeProvider только для генерации исходного кода C #, то вам нужно только разрешение сохранить сгенерированные файлы в какой-либо каталог или вообще не заметить (если возможно получить код, сгенерированный в поток памяти)

  • Если вы используете его для компиляции сгенерированного исходного кода C #, вам потребуется разрешение на запуск csc.exe (которое может быть недоступно в некоторых ограниченных средах, таких как общие хостинги).

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

  • Если вы также загружаете и выполняете сгенерированный код, то это зависит от того, как вы его сгенерировали. Если вы предполагаете, что в C # / CodeDOM нет ошибок и можете гарантировать, что сгенерированный код безопасен, то с вами все будет в порядке.

  • Если ваш код содержит такие вещи, как CodeSnippetExpression, которые могут быть предоставлены пользователем (каким-либо образом), то пользователь может написать и запустить все, что он или она хочет на вашем сервере, так что это было бы потенциально довольно опасно.

2 голосов
/ 13 июня 2010

Вроде.На первый взгляд, это не прямой риск, потому что вы не выполняете код, а компилируете его.Однако ничто не говорит о том, что компилятор C # не содержит какой-либо ошибки, которая при правильном вводе злонамеренных данных может привести к его выходу из строя и непосредственному выполнению команд.скомпилированный код (и, вероятно, вы делаете - иначе зачем вы скомпилируете его для начала?), он будет работать в том же контексте, что и вы.Очевидно, что это имеет всевозможные неприятные последствия для безопасности, во многом как использование квази-аналогичной функции eval() в других языках.

1 голос
/ 13 июня 2010

Это зависит от источника, который вы компилируете.Если вы имеете достаточный контроль над источником, то это может быть приемлемым риском.Если вы разрешаете кому-то за пределами сферы доверия предоставлять компилятору код, это может быть неприемлемым риском.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...