Подтвердить что ты не робот

Python, безопасный, песочница

Я хотел бы создать сайт, на котором люди могли бы загружать свои скрипты Python. Конечно, я хотел бы выполнить эти сценарии. Эти сценарии должны делать интересную работу. Проблема в том, что люди могут загружать скрипты, которые могут нанести вред моему серверу, и я хотел бы предотвратить это. Какая возможность запускать произвольные сценарии без ущерба для моей системы - фактически, не видя мою систему вообще? Спасибо вам

4b9b3361

Ответ 1

"Не может быть сделано".

Выполнение произвольных (ненадежных) скриптов и сохранение безопасности - это противоречие. Вы должны зайти так далеко, как использовать пользовательские ядра, тюрьмы, vms и т.д.

Вы можете посмотреть, как это работает http://codepad.org/about, это большая работа.

Ответ 2

Я не знаю в более ранних версиях, в Python 3 вы можете создавать функции с доступом к настраиваемой области через типы. FunctionType.

def f():
  return __builtins__

f() # this will work because it has access to __builtins__
scope = {}
sandboxed = FunctionType(f.__code__,scope)
sandboxed()  # will throw NameError, builtins is not defined

возвращаемая функция имеет доступ только к тому, что вы указали в словаре видимости. Интересно, все еще есть хаки вокруг этого.

Ответ 3

Я думаю, что способ сделать это - запустить эти скрипты в обычной оболочке Python, но на виртуальной машине. Я мог бы быть предвзятым, потому что моя "работа" в настоящее время должна работать с виртуальными машинами (университеты великолепны!).

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

Но есть одно: практически все веб-хосты сегодня являются виртуальными машинами, и они не поддерживают другую виртуальную машину внутри. Для этого вам нужен реальный, физический сервер.

Ответ 4

в настоящее время существует довольно много веб-сервера, на котором выполняются ненадежные коды python:

  • http://codepad.org/ (вероятно, самый известный пастебин для кодов питона)
  • http://codingbat.com/ (ранее Javabat, смена имени для отражения добавления Python)
  • http://appengine.google.com/ (код хоста python в инфраструктуре Google)
  • http://www.spoj.pl/ печально известная проблема кодирования суффиксов Sphere Online Judge

вы можете посмотреть, как они подошли к их проблемам.

или вы можете посмотреть на другой подход:

  • http://pyjs.org/ - пижама - компилятор python-to-javascript (работает на стороне клиента, переключает проблему безопасности на свою сторону)

Ответ 5

"Не может быть сделано", слишком жестко. Двигатели JavaScript живут в вашем веб-браузере, и они безопасно принимают и запускают ненадежные сценарии. Всегда есть возможность эксплойтов, но при правильной работе двигателя они безобидны. Существуют даже "медленные script" проверки, которые предотвращают бесконечные циклы от отказа в обслуживании, атакуя ваш браузер, делая эти небольшие диалоговые окна предупреждений.

Google App Engine запускает изолированную версию Python VM, которая эффективно удаляет все непослушные родные биты, которые позволяют получить доступ к базовой системе. Чтобы сделать это самостоятельно в безопасном режиме, вам понадобится опыт Python VM.

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

Похоже на то, что кто-то уже сделал, но я не знаю ни одного существующего проекта, который это делает.: -/

Ответ 6

Бретт Кэннон имеет предварительный дизайн для этого, последний раз я знал, но он не был разработан. Поэтому, если вы не хотите приложить много усилий для того, чтобы это произошло, в настоящее время нет общедоступного решения.

Блог Бретта находится по адресу: http://sayspy.blogspot.com/, если вы хотите попробовать прочитать его, я не смог найти прямую ссылку к его обсуждениям нового дизайна безопасности. Я не могу вспомнить, читал ли я его блог об этом, или если он был лично, где он упомянул об этом, извините.

Раньше были ограниченные возможности исполнения, но они были сброшены, потому что они просто не работали.

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

Ответ 7

Если вы используете Linux, возможно, seccomp - это решение, даже режим 2 лучше. С помощью этих функций вы можете создать новый процесс, который будет работать без сбоев и может только читать уже существующие дескрипторы файлов.

Возможно, использование пространств имен и cgroup поможет, это можно сделать с помощью ctypes.

Ответ 8

Вы можете попробовать Ideone API - он позволяет Python 2 и Python 3

Ответ 9

trypython.org (Лицензионный источник BSD здесь) делает безопасную версию браузера, подобранную браузером, в IronPython (через Silverlight/Moonlight). Возможно, вы сможете спеть безголовую версию этого для использования на сервере, но вы можете определенно разрешить пользователям распространять сценарии между собой, или вы можете распространять эти сценарии для выполнения в среде плагина.