Безпека
Вихідний мережевий трафік
URL для вихідного HTTP (network.request) і WebSocket (network.websocket) проходять валідацію:
- DNS-запит з кешем 5 хвилин
- Заблоковано:
localhost,127.0.0.1,::1, приватні діапазони RFC1918 (192.168.*,10.*,172.16–172.31.*) - HTTP: максимум 5 одночасних запитів, таймаут 10 с, перенаправлення не слідуються
- WebSocket: максимум 5 одночасних з'єднань, лише
ws:///wss://, той самий blocklist хостів
Немає окремого sandbox API для привілейованого auth server. Обмін OAuth-токенів використовує звичайний network.request.post на публічний HTTPS URL, який ви налаштовуєте (див. OAuth і секрети).
Вхідний HTTP
Аддони ніколи не слухають порти. Вхідні маршрути реєструються на Express-сервері main process:
- HTTP аддона:
/addon/{id}/{path} - Статичний web:
/addon_static/{id}/ - Шлях Socket.IO:
/addon/socket.io, простір імен/addon/{id}/{path}
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. Без шифрування; трактуйте як локальний кеш. Видаляється при деінсталяції.