Сканер или клиент нашёл инъекцию
В отчёте одна страница с пометкой «высокая серьёзность». Исправить её просто, но неизвестно, сколько таких мест рядом.
Защита от SQL-инъекций и XSS в веб-приложении держится на двух правилах: данные пользователя никогда не склеиваются с командой, а всё, что попадает на страницу, кодируется под место вывода. Мы читаем код, находим места, где правила нарушены, исправляем их вместе с вашими разработчиками и оставляем тесты и проверки в сборке, чтобы ошибка не вернулась со следующим релизом. Работаем на стенде, боевую систему не атакуем.
Проверка — от 200 000 ₽, 2–3 неделиКаждая находка с воспроизведением, исправлением и тестомКод остаётся в вашем контуре и вашем репозитории
В отчёте одна страница с пометкой «высокая серьёзность». Исправить её просто, но неизвестно, сколько таких мест рядом.
Поиск, фильтры, отчёты и выгрузки писали быстро, и условия склеиваются из частей. Каждое место нужно найти и переписать.
Известно, что работает, неизвестно, как устроен вывод в шаблонах и как собираются запросы. Нужен срез по этим двум классам ошибок до выхода к клиентам.
Прислали опросник: как защищены запросы к базе и вывод на страницу. Ответ должен опираться на проверенный код и тесты.
Инъекции редко сидят в простом «найти по номеру». Чаще они прячутся там, где параметр нельзя подставить обычным способом. Общая проверка по списку OWASP — на странице аудита безопасности веб-приложения.
Самая частая «защита» в старом коде — вырезать или экранировать опасные символы на входе.
Инъекция происходит, когда база не может отличить данные от команды. Если запрос собран строкой, то значение «О'Брайен» либо ломает запрос, либо, в руках злоумышленника, становится его частью. Параметризованный запрос устроен иначе: текст команды и значения доходят до базы раздельно, и значение уже не может стать частью команды, что бы в нём ни лежало.
Межсайтовый скрипт возникает, когда данные одного пользователя попадают на страницу другого как код. Одно «экранирование» на все случаи не работает, кодировать нужно под конкретное место.
Современные шаблонизаторы кодируют вывод по умолчанию. Уязвимости появляются в тех местах, где защиту выключили ради удобства.
Мы ищем в вашем коде обходы защиты, они хорошо видны поиском:
Метрика, чат-виджет и скрипт рекламной сети исполняются с теми же правами, что и ваш код. Если их владелец взломан, вы получаете XSS без единой уязвимости у себя. Мы составляем перечень внешних скриптов, убираем лишние, для статических файлов с чужих серверов включаем проверку целостности и ограничиваем разрешённые источники политикой CSP.
Заголовок Content-Security-Policy говорит браузеру, откуда можно исполнять скрипты. Строгая политика с одноразовыми метками (nonce) блокирует встроенные скрипты, которые внёс злоумышленник. Включаем сначала в режиме отчётов, чтобы увидеть, что сломается, и только потом в блокирующем.
Флаг HttpOnly не даёт скрипту прочитать сессию, Secure отправляет её только по защищённому соединению, SameSite ограничивает отправку с чужих страниц. Токены в localStorage доступны любому скрипту страницы, поэтому для сессии выбираем cookie.
Смена пароля, почты и реквизитов, выгрузка данных запрашивают текущий пароль или второй фактор. Скрипт на странице видит интерфейс, но не знает пароль.
X-Content-Type-Options запрещает браузеру угадывать тип файла, а запрет встраивания страницы в чужие окна закрывает подмену интерфейса.
Ни один способ в одиночку не находит всё, поэтому сочетаем их.
Цены совпадают со шкалой тарифов и с аудитом кода: цена зависит от объёма кода, а не от числа слов в заголовке. Работы дешевле 150 000 ₽ мы не берём.
Поиск по коду, чтение рискованных участков, прогон на стенде по обоим классам ошибок. Отчёт с воспроизведением, серьёзностью, способом исправления и порядком работ.
Сайт, кабинет, API и фоновые сервисы вместе, плюс стыки между ними.
Правки в коде вместе с вашими разработчиками или вместо них, по каждой находке тест. Этап с приёмкой, оценка по отчёту.
Правила статического анализа в сборке, тесты на инъекции, заголовки и CSP в режиме отчётов, памятка для разработчиков о том, как писать запросы и вывод.
Проверка новых релизов на эти классы ошибок, разбор обращений, обновление зависимостей. Сверх пакета — 5 000 ₽ в час.
NDA, согласование объёма и стенда с вашей службой безопасности. Определяем, какой код читаем и чего не трогаем. Боевую систему без вашего письменного согласия не затрагиваем.
Список адресов, полей, загрузок и обменов, через которые данные попадают в систему.
Поиск по коду, чтение, прогон на стенде. О серьёзных находках сообщаем сразу, не дожидаясь отчёта.
Находки с воспроизведением и способом исправления, сводка для руководителя, разбор с вашими разработчиками.
Правим по приоритету, к каждому исправлению добавляем тест. Если вы чините сами, проверяем результат повторно.
Межсетевой экран для веб-приложений (WAF) фильтрует подозрительные запросы снаружи. Он полезен как временная мера, пока исправление в очереди, но обход фильтра находят, а ошибка в коде остаётся. Мы чиним причину. Настройка и эксплуатация WAF как услуга в наш перечень не входит.
Если приложение ещё не проверялось вообще, начинают с аудита безопасности: он покрывает все десять классов, а инъекции и XSS в нём лишь два пункта. Если известно, что проблема именно здесь, подойдёт эта проверка.Защита входа и прав описана на странице SSO и MFA, защита самого API от перебора и чужих запросов — на странице защиты API.
Как работают обе атаки, как они закрываются и что проверить у себя за час на тестовой копии.
Десять классов ошибок без жаргона. Инъекции и XSS в нём стоят рядом с ошибками прав и настроек.
Требования к безопасности записываются в задание и проверяются при приёмке.
Сорок минут созвона: язык и фреймворк, как устроен слой доступа к базе, есть ли стенд. По итогам скажем, хватит ли проверки одного приложения и в какую вилку это укладывается.
Проверка одного приложения стоит 200 000 ₽ и занимает 2–3 недели, несколько приложений вместе — 350 000 ₽ и 3–4 недели. Это шкала нашего обследования, ниже неё работа не опускается. Исправление найденного оценивается отдельно, от 150 000 ₽, и заказывать его у нас не обязательно.
Нет. ORM защищает обычные запросы, но сырые вставки, форматирование строк, динамические имена столбцов и передача условий целиком возвращают проблему. Мы ищем именно эти места.
Может. Шаблонизаторы кодируют вывод по умолчанию, но в каждом есть способ вставить разметку как есть, и его включают ради форматирования текста. Мы проверяем такие места, самописные санитайзеры, работу с деревом страницы вручную и сторонние скрипты.
WAF может быть временной мерой, пока исправление ждёт релиза, но он не заменяет исправление: правила обходят, а ошибка остаётся. Настройку WAF как услугу мы не оказываем, зато исправляем причину в коде.
Нет. Мы читаем код и конфигурацию, а тестовые значения подаём на отдельном стенде с обезличенными данными. Боевую систему без вашего письменного согласия не затрагиваем, и в любом случае это не пентест.
Отчёт, где у каждой находки есть место в коде, воспроизведение, серьёзность и способ исправления, сводку для руководителя и порядок работ. Если исправление поручаете нам, к каждой правке добавляется тест, который не даёт ошибке вернуться.
Тремя вещами: правила анализа и тесты в сборке, ревью с чек-листом по запросам и выводу, памятка для команды с примерами из вашего кода.
Да. Можно читать код у вас, без выноса наружу, и работать на стенде внутри контура.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.