2010-10-18 4 views
5

Я хотел бы реализовать язык сценариев, чтобы помочь частично автоматизировать определенные задачи в общедоступной вики. Я не могу установить на сервере ничего такого, как Google Caja, или изменить собственное программное обеспечение вики, но я могу установить код JavaScript для выполнения на стороне клиента. Поскольку я хочу, чтобы обычные пользователи могли создавать и публиковать скрипты, использование самого JavaScript небезопасно и может привести к компрометации учетной записи.Простой, безопасный язык сценариев, реализованный в JavaScript?

Существует ли такая реализация языка сценариев, а если нет, ее относительно легко создать? Мое внимание сосредоточено на простоте обработки текста, запросах Ajax и реализации.

Вот пример задачи сценария необходимо будет выполнить, взятые из Wikipedia's procedure for requesting article deletion:

  1. Попросите пользователя для имени страницы вики и хороший повод, чтобы удалить его.
  2. Получите исходный код этой страницы, добавьте уведомление об удалении вверху и сохраните новый текст.
  3. Создайте новую страницу (ее имя, основанное на имени первой страницы), которое включает в себя причину удаления.
  4. Получите список пользователей, которые отредактировали страницу и уведомили первую (опять же, отредактировав конкретную страницу), что созданная им страница будет удалена.
+0

Если вы хотите, чтобы этот язык мог выполнять запросы ajax и получать доступ/изменять DOM, вы не получаете никакой защиты только от JS (если он не может коснуться DOM tho it _might_ не будет проблемой) – tobyodavies

+0

идея заключается не в том, чтобы любые произвольные модификации DOM или Ajax-запросы разрешались, а только те, которые относительно «безопасны» и могут быть легко отменены после того, как пользователю будет показан список действий, которые были фактически выполнены. – PleaseStand

+0

Я вообще не понимаю. Что означает этот «язык сценариев», который должен быть способен? – Pointy

ответ

3

Вот реализация Tcl в javascript: Tcl in Javascript.

Вот этот источник: tcl.js.

А вот код, реализующий живой консоли в вашем браузере, чтобы играть с: A little tcl.js console

Tcl не может быть ваша чашка чая, но реализация выглядит довольно простой прямой. Это в основном потому, что сам tcl - такой простой язык. Вы можете использовать его, чтобы получить представление о том, как реализовать переменные и функции.

Подсказка: в tcl структуры управления являются функциями, поэтому посмотрите, где реализованы встроенные функции, чтобы увидеть реализацию for, while и foreach.

1

Вы могли бы просто песочницу; то есть область в нескольких ключевых переменных, чтобы код пользователя не мог получить доступ к небезопасным объектам.

var execSandboxedJS = function (jsCode) { 
    var window = document.getElementById('myRootElement'); 
    var document = window; 
    eval(jsCode); 
}; 

Хотя, позволяя пользовательскому коду делать запросы ajax, сам по себе является небезопасным. Я бы пересмотрел здравый смысл проекта, если это то, что требуется.

+4

Не достаточно. Для начала это можно легко вырвать из-за использования 'self' вместо окна. В способе JavaScript, было бы очень сложно исправить все дыры - см. Http://code.google.com/p/google-caja/wiki/AttackVectors. – PleaseStand

2

Douglas Crockford's ADsafe должен быть защищенным подмножеством JavaScript.

Он состоит из библиотеки времени исполнения (~ 20 KB миниатюрный) и верификатора (входит в состав JSLint). Если Крокфорд должен был отказаться от «Программное обеспечение должно использоваться для Добра, а не Зла» из лицензии, оба компонента будут GPL-совместимыми программами с открытым исходным кодом.

Поскольку JSLint является программой JavaScript, он может полностью проверять пользовательские скрипты в веб-браузере. Это контрастирует с Google Caja, который написан на Java.

+0

Adsafe, похоже, не делает ни о каких бесконечных циклах или не применяет тайм-аут, что означает, что один пользователь может сделать что-то вроде 'for (;;);' и заблокировать страницу другого пользователя; или что-то вроде 'a = []; для (;;) {a = [a, a]} 'для взрыва памяти. –

 Смежные вопросы

  • Нет связанных вопросов^_^