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

StackOverflow https://stackoverflow.com/questions/818402

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top