2016-06-13 4 views
3

Я знаю, что это technically a duplicate question, но я считаю, что это действительно так, поскольку исходный вопрос был отправлен 7 лет назад, и с тех пор Python/web security прошла долгий путь.Позволяет пользователям выполнять код на Python на

Я хотел бы создать веб-приложение, которое позволяет пользователям вводить код python (через пакет редактора Ace), а затем выполнять его в браузере с помощью интерпретатора python на сервере. Я не могу использовать pypy.js, потому что мне нужно использовать numpy, pandas и matplotlib. По сути, я хотел бы создать свою собственную Codecademy (я учитель и хотел бы создавать курсы, подобные Codecademy, для моих учеников). К сожалению, созданная вещь, которую Codecademy назвала в какой-то момент, ни к чему не привела.

Я использую Flask, но я мог бы изучить Django, если бы это было проще.

Каков наилучший способ позволить моим пользователям запускать код python, не позволяя им влиять на остальную часть программы или обращаться к файлам за пределами того, что им разрешено?

+0

Итак, в чем ваш вопрос? Удостоверьтесь, что он не слишком широк! –

+1

Предоставление любому пользователю возможности выполнять код - это риск безопасности, даже если вы им доверяете. Я бы предположил, что CodeAcademy запускает каждого пользователя в миниатюрной виртуальной машине (или что-то в этом роде), чтобы они не могли нанести вред первичной системе. –

+0

Возможно, вам не нужны накладные расходы VM, если вы используете изолированный от хост-системы процесс (я думаю, это то, что Rushy называл «чем-то подобным»), т.е. docker вместо VM, в конечном итоге с обязательным контролем доступа, если вы не доверяете своим ученикам. – jpic

ответ

2

За последние 7 лет фундаментальных изменений в Python и веб-безопасности не произошло. По-прежнему суицидально разрешать пользователям запускать код на вашем сервере. Однако, что изменилось, это доступность легких решений VM, таких как докер. Для примера, как это могло бы работать, взгляните на https://civisanalytics.com/blog/engineering/2014/08/14/Using-Docker-to-Run-Python/. Я не буду ссылаться на это решение здесь, так как вы найдете другие примеры, даже если это уйдет.

Однако, это может быть более безопасным, то работает код пользователя прямо на вашем сервере, НО

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

Для контролируемой среды, такой как класс, эти риски могут быть приемлемыми, но для общедоступного сервера вам понадобится много знаний о безопасности, чтобы блокировать сервер и изображение докеров и фильтровать доступные функции python.

+0

Docker выглядит как хорошее решение.Сейчас план состоит в том, чтобы запустить его в сети моего университета (чтобы ученики подключили VPN для доступа к нему из кампуса). Если я когда-либо передам его на общедоступный сервер, я попытаюсь получить грантовое финансирование для фактического разработчика бэкэнда ... но это гипотетическая ситуация, которая очень далека. –

Смежные вопросы