Ответ 1
Я не могу говорить с Lua, но для Javascript у Caja есть инструменты для создания надлежащей песочницы, ограничивающей доступ только к определенным функциям. Первоначально он был создан для создания песочницы для виджетов HTML/JS (например, тех, которые используются в iGoogle).
http://code.google.com/p/google-caja/
Здесь описание проекта со своей главной страницы:
Caja (произносится как "KA-ha" ), является Испанское слово, которое означает коробку, банк, кассовый аппарат, хранилище; контейнер для ценности. Веб-разработчик использует традиционные инструменты, такие как HTML, JavaScript и CSS; и Caja обеспечивает компилятор ( "cajoler" ), который принимает веб-приложение и "уговорил" веб-приложение HTML. cajoler пытается проверить безопасность свойства, делая статический анализ, и где он не может переписать ввод для добавления проверок времени выполнения.
Поскольку веб-приложения широко используются API-интерфейсов браузера, например. API DOM, которые дают огромный контроль через веб-страницу Caja обеспечивает приручение API, которые виртуализируют части DOM. Страница, содержащая страницу, может настроить внедрение среды приложения что встроенное приложение считает он взаимодействует с DOM полная, но на самом деле манипулирование ограниченной частью содержащую страницу через механизм, называемый виртуальные фреймы.
JavaScript, что приложение Caja использует запись в подмножестве отказа JavaScript (на самом деле EcmaScript5). Это подмножество, называемое "Валией", включает почти весь язык JavaScript, но удаляет несколько подверженных ошибкам конструкции, такие как и с ограничениями как можно использовать eval.