Предоставление пользователям возможности загрузки сценариев Python для выполнения

Я понимаю, что позволить любому анонимному пользователю загружать любой файл в целом может быть опасным, особенно если он код. Однако у меня есть идея позволить пользователям загружать пользовательские сценарии AI на мой сайт. Я бы предоставил шаблон, чтобы пользователь мог конкурировать с другим ИИ в онлайн-игре, которую я написал в Python. Мне либо нужно решение, чтобы пользователь не мог скомпрометировать другие файлы или вводить вредоносный код через загруженный script или решение для выполнения на стороне клиента игры. Какие-либо предложения? (Я ищу решение, которое будет работать с моими скриптами Python)

Ответ 1

Имейте обширный API для пользователей и удалите все другие вызовы при загрузке (например, операторы импорта). Кроме того, разделите все, что имеет отношение к файлу ввода/вывода.

(Возможно, вы захотите сделать несколько проходов, чтобы убедиться, что вы ничего не пропустили.)

Ответ 2

Я никоим образом не связан с этим сайтом, и я только связываю его, потому что он пытается добиться того, что вы получаете после: jailing of python. Сайт code pad.

В соответствии со страницей о нем он запускается под geordi и ловушки всех вызовов sys с помощью ptrace. В дополнение к chroot'ed они находятся на виртуальной машине с брандмауэрами на месте, чтобы запретить исходящие соединения.

Считайте это отправной точкой, но мне нужно перехватить всю опасную вещь. Должен сам CYA.:)

Ответ 3

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

http://codespeak.net/pypy/dist/pypy/doc/sandbox.html

"В теории невозможно сделать что-либо плохое или прочитать случайный файл на машине из этого приглашения".

"Это безопасно делать, даже если script.py происходит из некоторого случайного ненадежного источника, например, если это делается с помощью HTTP-сервера."

Ответ 4

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

Ответ 5

Да.

Разрешить им script их клиент, а не ваш сервер.

Ответ 6

PyPy, вероятно, является достойной ставкой на стороне сервера, как было предложено, но я бы посмотрел, что ваш бэкэнд python обеспечивает четко определенные API и форматы данных и позволяет пользователям реализовать AI и логику в Javascript, чтобы он мог запускать в своих браузер. Таким образом, взаимодействие будет выглядеть так: для каждого матча/поворота/etc, передавать данные браузеру в четко определенном формате, предоставлять шаблон javascript, который получает данные и может реализовывать логику, и предоставлять веб-API, которые могут быть вызваны клиентом (браузер) для принятия необходимых действий. Таким образом, вам не нужно беспокоиться о безопасности или мощности сервера.