Project 02

SpyOut – браузерное расширения для платформы Faceit

SpyOut — собственный проект браузерного расширения для платформы FACEIT. Расширение показывает репутацию игроков и дополнительные игровые метрики прямо в интерфейсе FACEIT, а backend отвечает за хранение репутации, обработку голосов и интеграцию с FACEIT API.

РольАвтор проекта / full-stack
ФокусSecure Development
Клиентская частьManifest V3 / JavaScript
BackendFastAPI / PostgreSQL

Описание проекта

Проект решает прикладную задачу: дать игроку быстрый контекст по участникам лобби матча FACEIT — репутацию, статистику за последние матчи и другие показатели. Репутация строится на голосах пользователей и хранится на отдельном backend-сервисе. В рамках портфолио хочу продемонстрировать проект не только как браузерное расширение, но и как пример безопасной разработки: ограничение прав расширения, минимизация собираемых данных, валидация API-запросов, работа с базой через ORM и публикация сервиса через HTTPS.

Технический стек и инструменты

Browser ExtensionJavaScript, HTML, CSS, Chrome Extension Manifest V3, content scripts, работа с DOM FACEIT, поддержка Chromium-браузеров.
BackendPython, 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-вставок в интерфейс страницы.

Валидация API

Backend принимает ограниченный набор параметров, нормализует идентификаторы и значения голосов, а бизнес-логика вынесена на серверную сторону, а не доверяется клиенту.

Защита от SQL-инъекций

Работа с PostgreSQL выполняется через SQLAlchemy ORM и подготовленные запросы на уровне библиотеки, без ручной конкатенации SQL-строк из пользовательского ввода.

HTTPS и reverse proxy

Caddy используется как reverse proxy с TLS, а backend работает за прокси. Это разделяет публичную точку входа и внутренний сервис API.

Разделение компонентов

Extension, backend, database и внешний FACEIT API разделены по ролям. Такое разделение упрощает сопровождение, контроль данных и дальнейший security review.

Архитектура и поток данных

Архитектура SpyOut и поток данных

Результаты и ценность

  • Создан рабочий full-stack проект: browser extension, backend API, database и инфраструктура публикации на VPS.
  • Реализована архитектура с разделением клиентской логики, серверной бизнес-логики и хранения данных.
  • Снижены риски за счет минимизации permissions, API validation, ORM-доступа к базе и HTTPS-публикации.
  • Проект демонстрирует практические навыки безопасной разработки, интеграции внешних API и эксплуатации Linux/VPS-инфраструктуры.

Использованные и полученные навыки

Secure DevelopmentBrowser Extension SecurityManifest V3JavaScriptFastAPIREST APIPostgreSQLSQLAlchemyDocker ComposeCaddy / HTTPSLinux VPSAPI ValidationData MinimizationThreat ModelingSecurity Review