Возможности Lua: какой есть опыт?

В списке рассылки cap-talk < / a> вокруг того, поддерживают ли Lua и Javascript модель объектных возможностей, с выводом, что из-за поддержки ограничения среды вызываемыми функциями через setfenv и возможности неподдельных ссылок на неизменяемые объекты, OCM может быть реализован.

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

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

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

person Charles Stewart    schedule 09.11.2010    source источник
comment
Похоже, вы сделали уроки. Что именно вам не хватает?   -  person Zecc    schedule 15.11.2010
comment
Для протокола, я думаю, что Lua определенно может поддерживать OCM. По крайней мере, вы можете редактировать исходный код liolib.c и loslib.c самостоятельно. Это должно быть относительно просто, поскольку код там не такой сложный.   -  person Zecc    schedule 15.11.2010
comment
@Zecc: Актуальные истории применения теории, успешно или нет. В любом масштабе.   -  person Charles Stewart    schedule 15.11.2010
comment
+1 за то, что напомнил мне список рассылки cap-talk :)   -  person sarnold    schedule 30.01.2011
comment
Я просто хотел бы отметить, что setfenv будет устаревшим в пользу переменной _ENV и функции loadin, начиная с версии 5.2 Lua: lua.org/work/doc/manual.html#2.2   -  person Zecc    schedule 07.02.2011
comment
@Zecc: Это важное изменение, функции C больше не имеют окружения. Используйте повышающее значение с общей таблицей, если вам нужно сохранить общее состояние для нескольких функций C. (Вы можете использовать luaL_setfuncs, чтобы открыть библиотеку C, в которой все функции имеют общее upvalue.)   -  person Charles Stewart    schedule 07.02.2011


Ответы (1)


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

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

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

Caja (произносится как «КА-ха») - это испанское слово, означающее ящик, банк, кассовый аппарат, хранилище; контейнер для ценностей. Веб-разработчик использует традиционные инструменты, такие как HTML, JavaScript и CSS; и Caja предоставляет компилятор («уговорщик»), который берет веб-приложение и создает «уговоренное» веб-приложение HTML. Уговорщик пытается проверить свойства безопасности, выполняя статический анализ, и там, где он не может, он переписывает ввод, чтобы добавить проверки во время выполнения.

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

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

person Shakakai    schedule 07.02.2011
comment
Если я правильно понимаю проект, идея состоит в том, что у нас есть подмножество Javascript, Cajita, написанное на диалекте, ограничивающем доступ к данным в стиле передачи возможностей. Мое первое впечатление таково, что это будет очень тяжелое приложение возможностей к той задаче рефакторинга, которую я имею в виду, и на самом деле это не дает ответа на вопрос о том, как выглядит модель безопасности, основанная на возможностях, за пределами игрушечных примеров. Но рассмотрение того, как типичный Javascript может быть преобразован в Cajita, может быть полезным. - person Charles Stewart; 07.02.2011