Существует ли “безопасное” подмножество Python для использования в качестве встроенного языка сценариев?

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

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

class OnboardingPage extends StatelessWidget {
  OnboardingPage({this.viewModel, this.onNextPressed});

  final PageViewModel viewModel;
  final VoidCallback onNextPressed;
  (...)

. ]

И затем передача ссылки при добавлении OnboardingPage к вашему дереву виджетов в вашем методе build

OnboardingPage(viewModel:pages[0],onNextPressed: jumpForward)
13
задан starblue 16 June 2009 в 09:05
поделиться

12 ответов

Вот несколько ссылок, чтобы дать вам представление о том, с чем вы сталкиваетесь:

Есть также мертвый проект кода Google на http://code.google.com / p / sandbox-python /

10
ответ дан 1 December 2019 в 20:01
поделиться

Проект pypy предлагает функции песочницы, см. http://doc.pypy.org/en/latest/sandbox.html .

4
ответ дан 1 December 2019 в 20:01
поделиться
0
ответ дан 1 December 2019 в 20:01
поделиться

Нет готового к производству подмножества Python, которое было бы "безопасным". У Python было несколько модулей песочницы, которые устарели из-за недостатков.

Лучше всего либо создать свой собственный синтаксический анализатор, либо изолировать процесс python с помощью перехватчиков системных вызовов и заблокированной учетной записи.

Некоторые люди могут указать на вас. в PyPy, но он медленный и незаконченный.

4
ответ дан 1 December 2019 в 20:01
поделиться

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

Ваш собственный код, который находится «в дикой природе», также уязвим для этой атаки; то, что он находится в машинном коде, - это просто удар скорости и никакой защиты.

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

Но песочница? Не беспокойтесь об этом!

1
ответ дан 1 December 2019 в 20:01
поделиться

Вы можете попробовать IronPython на Silverlight / Moonlight, поскольку эти ребята впечатляюще, кажется, делают. Существует много полезной информации об этих типах приложений IronPython от разработчиков Resolver One здесь .

1
ответ дан 1 December 2019 в 20:01
поделиться

Я мало что знаю о том, какие именно возможности безопасности вы получаете в среде выполнения Java Virtual Machine или .NET, но вы можете подумать, запускаете ли ваш код python с Jython или IronPython могут позволить вам повысить безопасность.

1
ответ дан 1 December 2019 в 20:01
поделиться

AFAIK, некоторые попытки были предприняты в стандартной библиотеке Python, но они не увенчались успехом. Подробнее см. Ограниченное выполнение .

Предупреждение

В Python 2.3 эти модули были инвалид из-за различных известных и не легко устранимые дыры в безопасности. В модули все еще описаны здесь, чтобы помощь в чтении старого кода, который использует rexec и Bastion.

3
ответ дан 1 December 2019 в 20:01
поделиться

Немного сложно понять, что вы пытаетесь сделать - недостаточно подробнее.

Размещаете ли вы собственное приложение и разрешаете ли пользователям писать плагины? Рассмотрите возможность использования решения на уровне ОС, запустив приложение Python как отдельный процесс времени выполнения внутри jail / chroot / подобного и обмениваясь данными через сокеты.

Ожидаете ли вы, что ваши клиенты разместят собственное приложение и позволят «ненадежным сторонам» писать плагины? Есть ли причина, по которой вышеуказанное решение не работает? (Например, заказчик хотел бы развернуть на странных ОС без таких опций ... )

Ожидаете ли вы, что одни и те же люди будут размещать собственное приложение и «ненадежный сценарий» и хотите защитить их от самих себя? В смысле защиты их от написания "os.remove" и выполнения того, что они написали? Можете ли вы объяснить, почему?

Обратите внимание, что одной изолированной программной среды зачастую недостаточно без более строгих ограничений (максимальное количество циклов процессора, максимальный объем памяти, проблемы владения памятью ...)? Какую злобу вы хотите остановить? Обратите внимание, что и здесь ОС имеют замечательные возможности (приоритеты, процессы уничтожения, ulimit), которые не воспроизводятся во всех средах песочницы, и, безусловно, менее проверены на безопасность, чем вещи в ОС. (Я бы поверил, что Linux не будет иметь взломанных ulimit, прежде чем я поверю PyPy, чтобы не позволить злонамеренному кодеру занимать неограниченное количество памяти,

1
ответ дан 1 December 2019 в 20:01
поделиться

tinypy ( tinypy.org ) был создан как небольшое встраиваемое подмножество Python, написанное в стиле Lua. И поскольку в lua есть способ создания песочницы, я полагаю, что tinypy можно взломать в том же духе. Поскольку база кода tinypy настолько мала, ее довольно легко изучить и понять, как изменить что-то в соответствии с вашими потребностями.

3
ответ дан 1 December 2019 в 20:01
поделиться

Это похоже на то, что вы хотите: Возрождение ограниченного режима Python .

Интерпретатор Python имеет встроенный "ограниченный" режим, доступный путем изменения ] __ builtins __ магическая переменная. В статье На пути к защите интерпретатора Python этот трюк объясняется более подробно. Обратите внимание, что для полноценной работы требуется патч к интпредставителю Python; Я не знаю, применялся ли он уже.

Для чистой проверки концепции Python см. Его предыдущий пост Проблема нарушения безопасности Python .

0
ответ дан 1 December 2019 в 20:01
поделиться

PyMite VM отвечает всем требованиям, если все, что вам нужно сделать, это установить простые переменные, циклы, условные выражения и функции. PyMite крошечный, написан на C, использует пул статической памяти и может быть встроен. Он имеет чрезвычайно ограниченный набор встроенных функций, которые легко настроить. Точно так же единственные стандартные библиотеки - это частичные реализации string, dict, list и sys. Виртуальная машина PyMite является частью проекта python-on-a-chip, поэтому она была разработана для работы на микроконтроллерах, но может работать и на настольных системах в стиле posix. Обратной стороной является то, что в PyMite не так много ошибок, как в других реализациях Python.

4
ответ дан 1 December 2019 в 20:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: