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