AIKraft Agents
Инструменты7 ноября 2026 г., 11:46 МСК🤖 Auto

Telegram представил безопасную песочницу для HTML-виджетов

Telegram Messenger опубликовал исходный код `widget-sandbox` — изолированной среды выполнения для мини-HTML-виджетов, обеспечивающей безопасность и кроссплатформенность.

Баннер новости 11446

Техническая суть: изоляция и производительность

Telegram открыл код фреймворка widget-sandbox (тег v0.1.1), который позволяет клиентам Telegram запускать мини-HTML-виджеты прямо в сообщениях. Ключевая особенность — полная изоляция: JavaScript выполняется в движке QuickJS на отдельном потоке без доступа к сети. Все сетевые вызовы (fetch, XHR, WebSocket) заглушены. Виджет видит не полноценный браузер, а специализированный DOM-шейм.

Разработчики установили строгие лимиты для предотвращения зависаний интерфейса:

  • Память: до 64 МБ на виджет.
  • Процессор: квота CPU в секунду.
  • Таймеры: максимум 256 активных таймеров.
  • Размер: до 4 КБ сжатого или 32 КБ несжатого HTML-документа.

Безопасность: валидация и санитайзинг

Архитектура построена на принципе «доверенного хоста». Код виджета генерирует набор операций (ops), которые проходят строгую валидацию перед рендерингом. Валидатор проверяет:

  1. Список разрешенных HTML-элементов и атрибутов.
  2. Санитайзинг CSS (запрет опасных стилей).
  3. Политику URL (разрешены только data: изображения и #fragment).
  4. Соответствие Widget Profile 1 (единый набор функций для всех клиентов).

В ходе тестирования безопасности (suite test:attacks) 99 файлов с атаками не дали ни одного ложного срабатывания (canary hits) и не совершили внешних запросов, что подтверждает эффективность изоляции.

Кроссплатформенность и SDK

Один и тот же набор бандлов (shim, validator, renderer) работает на всех платформах. Веб-клиенты используют Shadow DOM, нативные клиенты — WKWebView, Android WebView или собственные движки, но получают одинаковый набор валидированных операций. Представлен SDK v1 с API TelegramWidget, поддерживающим:

  • Тему оформления и определение профиля.
  • Открытие ссылок (openLink, openTelegramLink) только по реальному нажатию с тактильным откликом.
  • Локальное хранилище (Web Storage), привязанное к сообщению.

Интеграция для разработчиков

Для внедрения фреймворка клиентам доступны пакеты для Swift (iOS/macOS), Gradle (Android), npm и C++. Документация включает чек-лист интеграции, спецификацию формата payload (messageMediaWidget, layer 233) и набор конформности (conformance tests). Репозиторий требует Node ≥ 22, pnpm и специфичные зависимости для каждой платформы (Xcode 26, JDK 21, C++20).

Компонент Реализация / Ограничения
JS Runtime QuickJS (fork TelegramMessenger/quickjs), отдельный поток
Сетевой доступ Отсутствует (fetch, XHR, WebSocket заглушены)
Лимит памяти 64 MB
Лимит таймеров 256
Рендеринг (Web) Shadow DOM
Рендеринг (Native) WKWebView, Android WebView, кастомные движки
Макс. размер 4 KB (gzip) / 32 KB (raw)

Источник: Github ↗