Минимизация прав расширения
Расширение работает в контексте страниц FACEIT и не требует избыточного доступа к браузеру. Логика построена вокруг content script и локальных UI-вставок в интерфейс страницы.
SpyOut — собственный проект браузерного расширения для платформы FACEIT. Расширение показывает репутацию игроков и дополнительные игровые метрики прямо в интерфейсе FACEIT, а backend отвечает за хранение репутации, обработку голосов и интеграцию с FACEIT API.
Проект решает прикладную задачу: дать игроку быстрый контекст по участникам лобби матча FACEIT — репутацию, статистику за последние матчи и другие показатели. Репутация строится на голосах пользователей и хранится на отдельном backend-сервисе. В рамках портфолио хочу продемонстрировать проект не только как браузерное расширение, но и как пример безопасной разработки: ограничение прав расширения, минимизация собираемых данных, валидация API-запросов, работа с базой через ORM и публикация сервиса через HTTPS.
| Browser Extension | JavaScript, HTML, CSS, Chrome Extension Manifest V3, content scripts, работа с DOM FACEIT, поддержка Chromium-браузеров. |
|---|---|
| Backend | Python, FastAPI, Uvicorn, REST API, Pydantic-валидация, SQLAlchemy 2.x, PostgreSQL. |
| Инфраструктура | Linux VPS, Docker / Docker Compose, Caddy reverse proxy, HTTPS/TLS, переменные окружения, сервисная изоляция. |
| Интеграции | FACEIT API: получение информации об игроках, матчах и статистике, нормализация игровых идентификаторов. |
Расширение работает в контексте страниц FACEIT и не требует избыточного доступа к браузеру. Логика построена вокруг content script и локальных UI-вставок в интерфейс страницы.
Backend принимает ограниченный набор параметров, нормализует идентификаторы и значения голосов, а бизнес-логика вынесена на серверную сторону, а не доверяется клиенту.
Работа с PostgreSQL выполняется через SQLAlchemy ORM и подготовленные запросы на уровне библиотеки, без ручной конкатенации SQL-строк из пользовательского ввода.
Caddy используется как reverse proxy с TLS, а backend работает за прокси. Это разделяет публичную точку входа и внутренний сервис API.
Extension, backend, database и внешний FACEIT API разделены по ролям. Такое разделение упрощает сопровождение, контроль данных и дальнейший security review.