Аудит расширения: что недоделано и какие дыры
Тройной независимый разбор кода (надёжность · безопасность · завершённость по ТЗ) + перекрёстная самопроверка. Спорные находки перепроверены по факту в коде — ложные отмечены отдельно.
✅ Исправлено и пересобрано (04.06.2026)
- P0 — alarms переустанавливаются на каждом пробуждении воркера (только недостающие, без сброса таймеров).
- P1 (деньги) — отчёт о принятии трейда: немедленный ретрай + логи при сбое.
- P1 (безопасность) —
postMessage теперь строго в window.location.origin (4 места).
- P2 — из манифеста убраны
clipboardWrite, localhost/127.0.0.1, старый домен skins-area.ru.
- P2 — анти-бан Steam: не более 25 сделок за цикл опроса/отзыва, пауза 300мс между запросами, прерывание после 5 подряд неудач (вероятный rate-limit).
Сборки обновлены: Chrome · Firefox · Opera · Яндекс. Нужно переустановить расширение. Остальное (лимит запросов/анти-бан, глубокий фикс «засыпания», попап-токен, Safari/Яндекс-публикация, delta-sync) — по приоритету.
Что РАБОТАЕТ (для контекста)
- Синхронизация инвентаря Steam → сервер (вкл. предметы на холде), авто каждые 10 мин + ручная.
- Создание Steam-трейд-оффера от продавца, опрос принятия (4 уровня фолбэка), отзыв оффера.
- Привязка Steam-токена к серверу для серверного опроса; при пробуждении воркер заново читает свежий токен.
- Скрытый кабинет/токен, вход по токену, попап со статусом и кнопкой синка. Сборки Chrome + Firefox.
- «Галки → лоты» (массовое выставление) — это уже сделано на стороне сайта (задеплоено).
Дыры НАДЁЖНОСТИ
- P0Главные будильники не переустанавливаются на пробуждении воркера. Alarms (синк 10 мин, опрос сделок 1.5 мин) ставятся только при установке/старте браузера. Если браузер их придушил/воркер перезапустился — сами не вернутся до рестарта → фоновый синк и опрос тихо останавливаются.
- P1Молчаливый сбой отчёта о принятии трейда — деньги могут не разблокироваться. Если трейд принят в Steam, но отчёт на сервер (
report-trade-status) упал по сети — ошибка глотается без ретрая. Сделка зависает «принято в Steam, но не отмечено» → выплата продавцу не уходит. Самое критичное по бизнесу.
- P1Опрос сделок и отзыв офферов при сбое «молча пропускаются до следующего цикла», без бэкоффа и без логов — поддержке не видно, что сломалось.
- P1Окно протухания токена: статус привязки проверяется раз в 30 мин; если access-токен протух между проверками — серверный опрос не работает до следующего цикла.
- P1Синхронизация инвентаря при 429/5xx падает целиком, без ретрая и без частичной отправки — данные устаревают до следующего цикла.
- P2Нет лимита параллельных запросов к Steam: при 50+ сделках цикл шлёт десятки запросов подряд → риск rate-limit/временного бана Steam; циклы могут наложиться.
- P2keep-alive (1 мин) не держит MV3-воркер вечно — при полном простое и закрытой вкладке Steam фон сам не просыпается → нет авто-ресинка без действия юзера.
Дыры БЕЗОПАСНОСТИ
- P1
window.postMessage(..., '*') — ответы (id оффера, id сделки) рассылаются всем фреймам страницы. Если на нашей странице окажется чужой iframe — он их прочитает. Надо слать в window.location.origin (4 места в content-script).
- P1Хранение Steam refresh-токена на нашем сервере — для серверного опроса мы шлём refresh-токен на бэкенд. Это by design, но это «ценная мишень»: утечка БД = полный доступ к Steam-аккаунтам продавцов. Минимум — шифровать на сервере, ограничить доступ, мониторить.
- P2
http://localhost/* и http://127.0.0.1/* в host_permissions боевой сборки — dev-хвост, убрать из прод-сборки. Там же лишние домены (skins-area.ru — старый/опечатка).
- P2Лишнее разрешение
clipboardWrite — в коде не используется, убрать (лишняя поверхность атаки).
- P2Обработчик сообщений воркера не проверяет
sender.id — низкий риск (внешние сайты слать не могут, externally_connectable нет), но стоит добавить для строгости.
Что НЕДОДЕЛАНО (функции)
- Попап: нет показа/копирования токена и кнопки «Отозвать токен»; нет индикатора статуса привязки Steam (сейчас только в консоль).
- Глубокий фикс «засыпания»: переустановка alarms на каждом пробуждении, надёжный захват refresh-токена, ретраи с бэкоффом, уведомление юзера при протухании.
- Сборки Safari и Яндекс не собраны (Chrome/Firefox/Opera/Edge — есть). По ТЗ §17 заявлены.
- Инвентарь: нет delta-sync (всегда шлётся целиком), нет дедупликации, пагинация ограничена 2500 предметов без догрузки.
Проверено и ОТКЛОНЕНО (ложные/преувеличенные находки)
Самопроверкой поймал в черновом разборе:
- не баг«Firefox-манифест сломан (scripts вместо service_worker)» — НЕВЕРНО: для Firefox MV3
background.scripts это норма (Chrome — service_worker). Сборка патчит правильно, FF грузится.
- не баг«access_token в URL — утечка через историю/логи» — преувеличено: это штатные запросы к самому Steam (api.steampowered.com) по HTTPS через fetch (не навигация, в историю не попадает).
- не баг«любой сайт может слать команды воркеру» — преувеличено:
externally_connectable нет, внешние страницы в воркер не достучатся.
Приоритет на починку (моё предложение)
- P1-деньги: ретрай + лог отчёта о принятии трейда (чтобы выплаты не зависали) — первым.
- P0-надёжность: переустановка alarms на пробуждении + проактивный ре-бинд токена.
- P1-безопасность: postMessage→origin; убрать localhost/clipboardWrite/старые домены из прод-сборки.
- Надёжность: лимит параллельных запросов + бэкофф (защита от бана Steam) + логи сбоев.
- Остальное (попап-токен/индикатор, Safari/Яндекс, delta-sync) — по мере приоритета.
← Назад к роудмапу