Разрешение пользователям загружать скрипты Python для выполнения
Вопрос
Я понимаю, что разрешение любому анонимному пользователю загружать файлы любого типа может быть опасным, особенно если это код.Однако у меня есть идея позволить пользователям загружать на мой сайт собственные сценарии ИИ.Я бы предоставил шаблон, чтобы пользователь мог соревноваться с другими ИИ в онлайн-веб-игре, которую я написал на Python.Мне нужно либо решение, гарантирующее, что пользователь не сможет скомпрометировать другие файлы или внедрить вредоносный код через загруженный скрипт, либо решение для выполнения игры на стороне клиента.Какие-либо предложения?(Я ищу решение, которое будет работать с моими сценариями Python)
Решение
Имейте обширный API для пользователей и удаляйте все другие вызовы при загрузке (например, операторы импорта). Кроме того, удалите все, что имеет отношение к файлу ввода / вывода.
(Возможно, вы захотите сделать несколько проходов, чтобы убедиться, что вы ничего не пропустили.)
Другие советы
Я никоим образом не связан с этим сайтом и связываю его только потому, что он пытается добиться того, что вы получаете после: тюрьмы на python. Сайт представляет собой кодовую панель .
Согласно странице about, она запускается под geordi и перехватывает все sys звонки с ptrace. В дополнение к тому, что они находятся в chroot, они находятся на виртуальной машине с установленными брандмауэрами для запрета исходящих соединений.
Считай, что это отправная точка, но я должен вмешаться в вопрос об опасности. Я должен сам CYA. :) Р>
Используя PyPy, вы можете создать песочницу Python. Песочница - это отдельная и предположительно безопасная среда Python, где вы можете выполнять их скрипты. Подробнее здесь
http://codespeak.net/pypy/dist/pypy/doc /sandbox.html р>
" теоретически из этого приглашения невозможно сделать что-либо плохое или прочитать случайный файл на компьютере. "
" Это безопасно сделать, даже если script.py поступает из какого-то случайного ненадежного источника, например, если это сделано HTTP-сервером.
Наряду с другими мерами предосторожности вы также можете включить проверку кода пользователем. Предполагая, что часть опыта заключается в рассмотрении решений других участников, и каждый является разработчиком Python, не позволяйте активировать новый код, пока за него не проголосует определенное количество участников. Ваши пользователи не собираются утверждать вредоносный код. Р>
Да.
Разрешите им писать сценарии для своего клиента, а не вашего сервера.
PyPy, вероятно, является достойной ставкой на стороне сервера, как и предлагалось, но я бы хотел, чтобы ваш бэкэнд Python предоставлял хорошо определенные API и форматы данных, и чтобы пользователи реализовывали AI и логику в Javascript, чтобы он мог работать на своих браузер. Таким образом, взаимодействие будет выглядеть следующим образом: для каждого совпадения / поворота / и т. Д. Передайте данные в браузер в четко определенном формате, предоставьте шаблон javascript, который получает данные и может реализовывать логику, и предоставлять веб-API, которые могут вызываться клиентом (браузер), чтобы принять необходимые действия. Таким образом, вам не нужно беспокоиться о безопасности или мощности сервера.