Безпека

Вихідний мережевий трафік

URL для вихідного HTTP (network.request) і WebSocket (network.websocket) проходять валідацію:

Немає окремого sandbox API для привілейованого auth server. Обмін OAuth-токенів використовує звичайний network.request.post на публічний HTTPS URL, який ви налаштовуєте (див. OAuth і секрети).

Вхідний HTTP

Аддони ніколи не слухають порти. Вхідні маршрути реєструються на Express-сервері main process:

Params і config

Записи в api.config.updateParams і api.config.setConfig валідуються в main process (ліміти розміру, перевірки дозволів).

Виконання у VM

Початкове виконання index.js має таймаут 5 секунд. Помилки в таймерах і обробниках подій перехоплюються та логуються; вони не падають worker.

Неперехоплені помилки поза цими обгортками все ще можуть звалити процес worker. Після 3 послідовних падінь без стабільної роботи автоперезапуск припиняється, доки користувач не перезапустить аддон у налаштуваннях — див. Життєвий цикл — Захист від циклу падінь.

Токен доступу frontend (data.token)

Кожен екземпляр аддона отримує стабільний секрет на пристрій, id аддона та шлях встановлення в data.token. Він додається до URL віджета/статики як ?token=….

Перевіряйте query.token === data.token (або еквівалентний заголовок) на HTTP-ендпоінтах, призначених лише для вашої вбудованої web-сторінки, щоб інші локальні сторінки не могли їх викликати.

Токен змінюється, якщо користувач перевстановлює або переміщує папку аддона.

Дозвіл ROOT

require() і необмежений доступ до модулів доступні лише з ROOT. Не запитуйте ROOT у розповсюджуваних аддонах.

Приватне сховище

storage.Read() / Write() зберігають JSON у {installPath}/storage_data.json. Без шифрування; трактуйте як локальний кеш. Видаляється при деінсталяції.