СВОЙНаш собственный продукт
Аудит безопасности tarasovvitalii.com: восемь находок, восемь исправлений
Проверка безопасности изнутри для сайта-портфолио основателя, tarasovvitalii.com: чат, API сообщений, сервер и 15 демо-концептов. Мы нашли восемь проблем, одна из них — внедрение скрипта высокого риска на том домене, где чат хранит сессию входа, исправили все восемь и перепроверили каждое исправление.
Открыть проект
- находок по безопасности, все исправлены: 1 высокого риска, 1 среднего и 6 низкого
- 8
- демо-страниц открываются с новой политикой безопасности без единого нарушения
- 119
- тестов API сообщений проходят, включая новые правила
- 48 / 48
- известных уязвимостей в npm-зависимостях сайта и API
- 0
Задача
tarasovvitalii.com — не только статичные страницы. На сайте работает чат на VITON ID (Firebase Authentication и Firestore), небольшой API на Node, который хранит сообщения из формы и отправляет письма, сервер nginx в Docker и копии 15 концепт-сайтов в разделе /demos/. Посетитель, который входит, чтобы написать основателю, доверяет всему этому сразу, поэтому 28 сентября 2026 года мы проверили сайт изнутри — так же, как проверили бы сайт клиента перед запуском.
Для каждой части вопрос был вопросом злоумышленника: что с ней может сделать посторонний и чего это будет стоить владельцу? Находка засчитывалась, только когда мы её воспроизвели, а исправление — только когда та же атака против него не сработала.
Что мы сделали
В проверку вошли каждый маршрут API и проверка токенов, правила Firestore вместе с 39 тестами в эмуляторе, конфигурация nginx и Docker Compose, npm-зависимости сайта и API, интерфейс чата и код всех 15 демо. Вместо атак на рабочий сервер мы подняли те же контейнеры локально — nginx и API с рабочими настройками — и пробовали каждую атаку там.
Самая серьёзная находка оказалась не на самом сайте, а в демо. Концепт магазина Oriva вставлял параметр адреса ?cat= в страницу как HTML, поэтому собранная ссылка запускала скрипт на tarasovvitalii.com — на том домене, где чат хранит сессию Firebase: одного клика владельца хватило бы, чтобы открыть переписку. Остальные 14 демо только сравнивают параметры адреса с известными значениями.
Как это устроено
Исправления по каждой находке. Демо Oriva теперь принимает только известные категории и сортировки. У /demos/ появилась своя политика безопасности (Content-Security-Policy), а Leaflet — библиотека карт, которую 52 демо-страницы берут с CDN, — закреплён хэшами целостности. Редирект /demos/<id> собирается по строгому шаблону, а не повторяет запрошенный путь. Адреса почты, через которые в ссылку «Ответить» у владельца могли попасть скрытая копия (BCC) или текст, отклоняются, а из имён убираются символы смены направления текста.
Остальное — на сервере: общий дневной лимит на сохранённые заявки (по умолчанию 500) поверх лимитов на один адрес; API сообщений работает от непривилегированного пользователя на файловой системе только для чтения, все возможности Linux отключены; версия nginx скрыта из ответов, ветка — текущая стабильная; HSTS — заголовок, который держит браузер на HTTPS, — отдаётся и на www и распространён на поддомены. Новые тесты API проверяют отклонённые адреса, удалённые символы и лимит.
Что есть сейчас
Восемь находок, восемь исправлено: одна высокого риска, одна среднего и шесть низкого. Код, который срабатывал в старом демо, в новом ничего не делает, а запрос, который раньше подставлял заголовок Set-Cookie, теперь получает обычный 404. Все 119 демо-страниц открываются с новой политикой без единого нарушения, тесты API проходят 48 из 48 вместе с новыми правилами, а npm audit не находит известных уязвимостей в зависимостях сайта и API.
Проверено и в порядке: проверка токенов Firebase (только RS256, обязательный идентификатор ключа, проверка аудитории, издателя и срока действия), правила Firestore, при которых никто не читает чужую переписку и не пишет от имени владельца, шаблоны писем, где экранировано каждое значение, логи без токенов, почты и IP-адресов и чат, который никогда не вставляет текст посетителя как HTML. На живом сайте 28 сентября 2026 года заголовки ответов не показывают версию сервера, HSTS с поддоменами стоит на обоих адресах, политика демо — на /demos/, а запрос с подменой заголовка получает 404.
Чего это не доказывает
Это наш собственный сайт, а не работа для клиента. Проверку провела сама студия по исходному коду; это не независимый пентест и не сертификат. Атаки воспроизводились на локальной копии рабочих контейнеров, а не на живом сервере; на живом адресе перепроверены только заголовки ответов и редирект.
Результат относится к тому, что мы проверили 28 сентября 2026 года: новый код, новые зависимости или новые демо требуют такой же проверки. Демо по-прежнему живут на домене сайта, поэтому новая политика ограничивает, до чего дотянется внедрённый код, но не изолирует его; полностью изолировать демо можно, только перенеся их на отдельный домен.

Услуги, которые показывает кейс
Опишите задачу на странице услуги — письменный объём, срок и цена придут в течение одного рабочего дня.
Обсудить похожий проектДругие кейсы
Все кейсы
СВОЙНаш собственный продукт
Айдентика брендов VITON13
Айдентика · 5 знаков · 2026
Знаки собственных брендов VITON13 в том виде, в каком они существуют в коде сайта: два рисованных знака-глобуса с буквой V, три словесных знака, набранных шрифтом, и один акцентный цвет — небесно-голубой #5ac8ff на чёрном. В кейс входит и VITON XIII — линия из пяти ароматов.
Читать кейс →
СВОЙНаш собственный продукт
Стайлинг Old Money
Стайлинг · Old Money · 2026
Old Money — собственная марка одежды VITON13, а не клиентский проект. Мы собрали из её 16 товаров три мужских образа с ценой, добавили к каждому товару памятку по уходу на пяти языках и выпустили в VJOURNAL статью о капсульном гардеробе на небольшой бюджет.
Читать кейс →
КОНЦЕПТКонцепт — не заказ клиента
VITON XIII BEAUTY
Концепт · 6 визуалов, созданных ИИ · 2026
VITON XIII BEAUTY — концепт, а не запущенная линейка: бьюти-продолжение парфюмерного бренда из собственного магазина VITON13, показанное в шести ключевых визуалах. У каждой категории свой мир — мёд для аромата, холодное стекло и пастель для ухода, тёмные ягоды для губ, — а вместе их держат название VITON XIII BEAUTY и спокойные лаконичные этикетки. Все изображения созданы ИИ.
Читать кейс →