Возможности для Lua: какой опыт есть? - PullRequest
35 голосов
/ 09 ноября 2010

Было некоторое обсуждение списка рассылки *1003* вокруг того, поддерживают ли Lua и Javascript модель объектных возможностей, с выводом, что из-за поддержки ограничения среды для вызываемых функций через setfenvи возможность неоправданных ссылок на неизменяемые объекты, OCM может быть реализован.

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

Некоторые ссылки:

  1. Более старый вопрос SO: Как мне создать безопасную песочницу Lua?
  2. Фон на erights.org: Из объектов в возможности
  3. Lua wiki: Песочницы и ReadOnlyTables - показывает setfenv в действии;показывает основную идею за таблицами, которые при правильных обстоятельствах могут быть сделаны только для чтения

1 Ответ

3 голосов
/ 07 февраля 2011

Я не могу говорить с Lua, но для Javascript у Caja есть инструменты для создания правильной песочницы, ограничивающей доступ только определенным функциям. Первоначально он был создан для создания изолированной программной среды для виджетов HTML / JS (например, используемых в iGoogle).

http://code.google.com/p/google-caja/

Вот описание проекта с их домашней страницы:

Каха (произносится "Ка-ха"), является Испанское слово, которое означает коробку, банк, кассовый аппарат, хранилище; контейнер для ценные вещи. Веб-разработчик использует традиционные инструменты, такие как HTML, JavaScript и CSS; и Каха обеспечивает компилятор ("cajoler"), который принимает веб-приложение и производит веб-приложение HTML "cajoled". cajoler пытается проверить безопасность свойства путем проведения статического анализа, и где он не может переписать ввод для добавления проверок во время выполнения.

Поскольку веб-приложения широко используются API браузеров, например API DOM, которые дают огромное количество контроля через веб-страницу, Caja обеспечивает прирученный API, которые виртуализируют части DOM. Содержащая страница может настроить встраивать среду приложения так что думает встроенное приложение он взаимодействует с DOM полная страница, но на самом деле только манипулируя ограниченной частью содержащий страницу через механизм под названием виртуальные фреймы.

JavaScript, что приложение Caja использует записано в подмножестве аварийного останова JavaScript (на самом деле EcmaScript5). Это подмножество, называемое "Valija", включает в себя почти весь язык JavaScript, но удаляет несколько подверженных ошибкам конструкции, такие как с и ограничивает как можно использовать eval.

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