Предоставление пользователям возможности загружать скрипты Python для исполнения - PullRequest
12 голосов
/ 04 мая 2009

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

Ответы [ 6 ]

8 голосов
/ 04 мая 2009

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

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

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

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

8 голосов
/ 04 мая 2009

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

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

Считай, что это отправная точка, но я должен вмешаться в вопрос об опасности. Я должен сам CYA. :)

4 голосов
/ 04 мая 2009

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

3 голосов
/ 04 мая 2009

Да.

Разрешите им писать скрипт своему клиенту, а не вашему серверу.

1 голос
/ 04 мая 2009

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

0 голосов
/ 18 мая 2009

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

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

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