Які мої варіанти вибору сценаріїв із пісочним сценарієм на сервері? [зачинено]


11

Я будую загальнодоступний веб-сайт, де користувачі діляться даними та сценаріями, щоб обробляти деякі дані. Сценарії запускаються на сервері в якійсь пісочниці без іншої взаємодії цього циклу: моя програма Perl читає з бази даних сценарій, створений користувачем, додає дані, що підлягають обробці, в сценарій (тобто: документ JSON), потім викликає інтерпретатора, він повертає відповідь (документ JSON або звичайний текст), я зберігаю його в базі даних за допомогою мого сценарію perl. Сценарій повинен мати можливість мати деякий доступ до вбудованих функцій, доданих до мови сценаріїв власноруч, але нічого більше.

Тож я натрапив на node.js як інтерпретатор javascript, а також годину назад або з V8 від Google (чи має сенс v8 для подібних речей?). CoffeeScript мені також прийшов до тями, оскільки він виглядає приємно, і це все ще Javascript.

Я думаю, що JavaScript досить широко поширений і є "пісочницею", оскільки він не має дзвінків на ОС або нічого віддаленого небезпечного (я думаю).

до речі, я пишу систему на Perl та Php для переднього кінця.

Для вдосконалення питання: я вибираю Javascript, тому що я думаю, що це достатньо безпечно і просто для реалізації з node.js, але які інші альтернативи є для досягнення такого завдання? Луа? Пітон? Я просто не можу знайти інформацію про те, як правильно запустити інтерпретатора з пісочним кодом.


Не ясно, що ви просите. Це можливо? Звичайно, це можливо.
Роберт Харві

Відповіді:


3

Java містить вбудований інтерпретатор JavaScript. Він за замовчуванням не є пісочницею, але це можна ввімкнути:

  • встановлення правильного затвора класу - JavaScript може нормально завантажувати класи Java. Затвор класу - це різновид менеджера безпеки, який вирішує, які класи можна завантажувати, а які не можна.
  • "startup" скрипт - коротка ініціалізація JavaScript, яка видаляє точки доступу до зовнішньої системи: java = undefined;Packages = undefined;org = undefined;

Якщо ви це зробите, скрипти, що працюють всередині, ні в якому разі не повинні мати доступ до зовнішнього середовища.

Він також пропонує тайм-аут сценарію та обмеження кількості інструкцій, що корисно для пісочниці - ви можете обмежити, наскільки тривалий або складний сценарій.

Я використовував це в Java 7, яка має двигун Rhino JavaScript. У Java 8 є новіший і сучасніший движок Nashorn - я не пробував цього з Nashorn, але, мабуть, він повинен бути схожим.


Чи можете ви мати білий список, а не чорний список?
Петах

@Petah, ви можете спочатку вимкнути (чорний список) все, а потім висунути певну функціональність у вигляді об’єкта в пісочну скриньку. Потім це по суті білий список, так що так, ви можете це зробити.
qbd

Знання JavaScript досить поширені, щоб зробити його хорошим вибором як мови сценаріїв. Ви, можливо, захочете визначити деякі глобальні, а також дзвінки для користувачів, оскільки ви обмежуєте доступ до дзвінків. Подумайте, як браузер визначає windowзмінні для JavaScript, щоб увімкнути взаємодію.
Майкл Шопсін

2

моя перша думка була node.js - як ви згадуєте вище, це інтерпретатор JavaScript. І це саме те, що вам потрібно, якщо ви хочете виправити сценарії в справжній безпечний спосіб.

Іншим способом може бути те, що ви перевіряєте кожну команду в скрипті, чи вона дійсна чи ні. Але я не думаю, що ви отримаєте безпечну пісочницю.

Привітання


Чи є який-небудь пісочний супорт i NodeJS або доступний з NodeJS?
ysdx

4
Знайшли це: gf3.github.com/sandbox
ysdx

+1 за чудове посилання на "NIFTY JAVASCRIPT SANDBOX FOR NODE.JS".
Джек Стоун

Примітка: пісочниця gf3 може бути зламана з.
Petah
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.