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


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.