Перейти к основному содержимому
megapromotingДавайте обсудим

Экспертиза · Кибербезопасность

Безопасность приложений, которые мы создаём и эксплуатируем, — проверки, записанные в коде, проверяемые извне, без сертификатов, которых у нас нет.

Работа охватывает безопасность приложения и инженерии конфиденциальности: заголовки и политику содержимого, ограничение частоты, позицию проверок по умолчанию «закрыто», шифрование секретов, журналы, которые нельзя переписать, анонимизацию данных и сроки хранения, заданные в коде, а не только в политике. Мы не сертифицированные аудиторы и не выдаём сертификаты.

Уже построеноAm ales „livrat” pentru un domeniu deliberat îngust, iar limita o scriem înaintea listei de capabilități. Controalele descrise mai jos rulează în sisteme proprii și o parte se pot verifica din exterior chiar acum: limitarea de rată se demonstrează cu douăsprezece cereri consecutive (a zecea primește 429, verificat pe producție la 06.09.2026), sonda de sănătate întoarce doar valori logice, iar antetele de securitate se citesc din răspuns. A doua și a treia implementare citate sunt platforma de sesizări — politică de conținut cu valoare unică per răspuns, listă albă de destinații de rețea verificată în integrarea continuă, autentificare în doi pași obligatorie pentru personal — și clientul de semnătură electronică scris fără nicio dependență nouă, cu apărare împotriva încadrării semnăturii XML. Ce NU susține dovada: nu avem nicio certificare, nu facem testare ofensivă ca serviciu, nu operăm un centru de monitorizare și nu emitem atestate de conformitate.

Большинство дыр, которые мы нашли в собственных системах, не были сложными эксплойтами. Это были значения по умолчанию. Маршрут, который инициировал телефонный вызов на любой номер без аутентификации, который уже давно не вызывался ни одним компонентом интерфейса. Проверка origin, которая проходила, когда список был пуст. Полный IP-адрес, отправляемый в уведомлении, в то время как публичная страница обещала анонимизацию. Все три были написаны в нашем коде, и ни одна не была бы видна в автоматическом сканере.

Отсюда и форма услуги. Мы не продаём отчёт сканирования. Мы читаем код с точным вопросом: когда эта проверка не может решить, что она делает — разрешает или отказывает? Позиция по умолчанию — разница между воротами и декорацией. В наших системах ворота потребления при исключении возвращают «не разрешено», а маршрут телефонного вызова отвечает 404, если секрет не настроен, — то есть функция отключена, если кто-то не включил её намеренно.

Вторая половина работы — это инженерия конфиденциальности, потому что на практике эти две вещи не разделяются. Объявленный публично срок хранения ничего не значит, если он не применяется кодом. У нас журнал запросов удаляет файлы старше объявленного срока, используя число дней из того же значения, которое указано в опубликованной политике. В другой системе таблица хранения удерживает рядом с каждым сроком опубликованный текст слово в слово и правовое основание — чтобы политика и база данных не могли тихо разойтись.

То, что мы публикуем о себе, — часть метода. Политика содержимого этого сайта разрешает `unsafe-inline` и `unsafe-eval` в скриптах. Это реальная слабость, и мы пишем её здесь, а не во внутреннем отчёте — именно это было механизмом, благодаря которому наш собственный аудит доступности смог внедрить инструмент проверки прямо в production-страницу. Поставщик, который не публикует собственные известные слабости, не может найти ваши.

Что входит

Работа, по составляющим

Мы читаем положение по умолчанию каждой проверки

Центральный вопрос анализа: когда проверка не может решить, разрешает она или отказывает? Реальный пример из собственного кода, помеченный как таковой: список разрешённых origin-адресов виджета позволяет проверке пройти, если список пуст, — намеренный выбор для совместимости со старыми установками, записанный в комментарии, но означающий, что ограничение по домену нужно настраивать явно для каждого внедрения. Контрпример: ворота потребления, которые при любой исключительной ситуации возвращают «не разрешено».

Корректное ограничение по частоте за прокси

Десять запросов в минуту на один адрес, с тонкостью, которая решает, работает ограничение или нет: ключ берётся из последнего хопа заголовка перенаправления, а не из первого. Наш прокси добавляет реальный адрес в конец того, что прислал клиент, поэтому первая запись контролируется атакующим — тот, кто строит ключ на ней, может обходить ограничение, отправляя случайные значения. Это можно проверить извне: двенадцать последовательных запросов дают девять успешных ответов, затем 429.

Заголовки и политика содержимого, с уникальным значением на каждый ответ, где это возможно

На этом сайте: строгий транспорт на два года с поддоменами и включением в preloading-список, несжимаемый тип содержимого, ограниченная referrer-политика, политика разрешений, которая закрывает камеру и оставляет микрофон и геолокацию только для собственной страницы. На платформе обращений ещё строже: политика содержимого получает уникальное значение на каждый ответ, генерируемое в прокси, без сторонних источников для скриптов, подключений или шрифтов, а встраивание в frame полностью отклоняется.

Белый список сетевых назначений, проверяемый автоматически

В публичном проекте список адресов, к которым приложению разрешено обращаться, проверяется командой, запускаемой в непрерывной интеграции, как статически, так и во время выполнения. Новый пакет, который начинает звонить домой, проваливает проверку, а не попадает в production. Это контроль, который ловит именно тот класс инцидентов в цепочке поставок, от которых никто не защищается сканером уязвимостей.

Секреты не попадают в ответы, журналы или уведомления

Health-эндпоинт формы контакта возвращает только логические значения — настроено ли, действительна ли учётная запись, можно ли записать журнал, — и никогда не возвращает токен, идентификатор диалога или имя бота. Токены каналов платформы сообщений хранятся в зашифрованном виде. Журналы оповещений проходят через модуль редактирования персональных данных перед записью.

Анонимизация применяется до записи, а не после

IP-адрес усекается до сетевого префикса — /24 для IPv4, /48 для IPv6 — до попадания в журнал или уведомление. С двумя важными деталями: берётся последний хоп, а не первый, по той же причине, что и при ограничении скорости; и IPv4-адреса, переданные в виде IPv6-mapped, распознаются и обрабатываются как IPv4, иначе они сохранялись бы целиком, то есть ровно наоборот по сравнению с целью.

Журнал, который добавляет, а не переписывает

Запросы через форму записываются в журнал с добавлением, по одному объекту в строке, с правами 0600 для файла и 0700 для каталога, до попытки доставки. Причина — реальный сбой: когда канал уведомления упал, endpoint возвращал 500, и каждый запрос терялся без следа. Теперь сломанный канал означает «нужно посмотреть в файл», а не «запроса никогда не существовало». Результат доставки записывается второй строкой с тем же идентификатором.

Срок хранения, применяемый кодом, а не только заявленный

Журнал запросов удаляет файлы старше публично объявленного срока, беря число дней из того же значения. В другой системе таблица ретенции хранит рядом с каждым сроком опубликованный дословно текст и правовое основание, а функция очистки по умолчанию сообщает, что она бы удалила; реальное удаление требует явного аргумента. Тихое удаление — это режим отказа, а не функция.

Идентификация и подпись, когда проект этого требует

У нас с нуля и без новых зависимостей написаны поставщик услуг для федеративной аутентификации и клиент для электронной подписи. Анализатор XML не обрабатывает определения типов документов, поэтому класс атак через внешние сущности не применяется; проверка подписи возвращает узел, охваченный подписью, а не логическое значение, и вызывающая сторона обязана сравнить идентичность объекта — защита от вкладывания подписи. Каноникализация была проверена на официальных векторах спецификации.

Как это выглядит

Путь, шаг за шагом.

01

Мы устанавливаем область и то, чего нам нельзя касаться

Письменно, до любого задания: какие системы, какой период, какие типы проверки разрешены и кто контактное лицо, если что-то остановится. Мы сдаём: подписанный документ об области и список исключённых систем.

02

Мы читаем код и конфигурацию с акцентом на значение по умолчанию

Проверки, которые не могут решить, секреты, попадающие в ответы или журналы, маршруты, которые уже никто не вызывает, но они остаются открытыми, отсутствующие заголовки. Мы сдаём: выводы с файлом и строкой, упорядоченные по тому, что с ними можно сделать, а не по теоретической серьёзности.

03

Мы исправляем или точно описываем исправление

Где у нас есть доступ, мы ставим контроль и пишем тест, который его удерживает — проверка без теста теряется при первом рефакторинге. Где доступа нет, мы сдаём изменение, описанное достаточно точно, чтобы команда клиента могла применить его без дополнительных вопросов.

04

Мы связываем конфиденциальность с кодом

Срок хранения, анонимизация и список получателей становятся значениями в коде, рядом с опубликованным текстом. Мы сдаём: заполненный реестр обработок, с заполненной колонкой «где реализовано», и список оставшихся пунктов, которые нужно решить, с тем, кто решает каждый.

05

Мы проверяем снаружи то, что можно проверить снаружи

Заголовки, поведение на границе, что возвращают проверки состояния. Мы сдаём: точные команды проверки, чтобы любой — включая аудитора клиента — мог повторить проверку без нас.

Straturile pe care le atingem, de sus în jos1antete și politică de conținut2limitare de rată cu cheia luată din ultimul salt3autentificare, roluri și separare pe organizație aplicată înbază4secrete criptate, niciodată în răspunsuri sau jurnale5jurnal cu adăugare și anonimizare aplicată înainte de scriere6termen de păstrare aplicat de cod, cu textul publicat alături
Straturile pe care le atingem, de sus în jos

Данные

К чему прикасаемся, где оно лежит и сколько остаётся

Вопросы, которые задаёт всякий, у кого есть ответственный за защиту данных, — заданы здесь раньше, чем их задаст он.

Что мы охватываем в анализе
Код, конфигурацию сервера, заголовки ответов и, где уместно, схему базы данных и политики доступа по строкам. Нам не нужны реальные данные клиентов, чтобы провести анализ, и мы предпочитаем вообще к ним не прикасаться.
Чего мы не делаем без письменного разрешённого домена
Никаких действий, которые создают трафик против работающей системы. Проверки на production, указанные на этой странице, — это обычные запросы на чтение на собственных системах. Любое превышение этого предела требует письменного разрешения с периодом и адресами, подписанного тем, кто имеет право его выдавать.
Куда попадают выводы
В документ с одним выводом на строку: где он находится, что с ним можно сделать, что именно его устраняет и как проверяется устранение. Выводы, описывающие путь эксплуатации, не передаются по незащищённым каналам и не попадают в публичные материалы до исправления.
Реестр обработок
Для части, связанной с конфиденциальностью, результат — это реестр с одной строкой на деятельность: цель, основание, категории данных, получатели, передачи, место хранения, срок, меры и файл в коде, где это реализовано. То, что не удалось проверить, пишется как «неверифицировано», не заполняется по шаблону.
Правило, которое держит политику приклеенной к коду
Если изменение кода меняет то, что собирается, кому это передаётся или как долго хранится, опубликованная политика меняется в том же релизе. Расхождение между опубликованной политикой и кодом и было именно той проблемой, из-за которой мы написали собственный реестр.

Случай

Забытый маршрут, который мог звонить кому угодно

Ситуация

При ревизии собственного сайта мы наткнулись на маршрут интерфейса программирования, который инициировал телефонный вызов на любой номер, отправленный в теле запроса. Без аутентификации, за счёт и с номера компании. Ни один компонент интерфейса его больше не вызывал — единственным вызывающим был элемент, который больше не отображался. То есть он функционировал открытым в интернете, без того чтобы у кого-либо был повод на него смотреть.

Что мы построили

Мы рассмотрели это как две проблемы, а не одну. Технически: маршрут теперь требует общий секрет в заголовке, а если секрет вообще не настроен, отвечает 404 — возможность отключена, если кто-то не включит её намеренно, а не включена, пока кто-то её не остановит. Юридически и этически: автоматический незапрошенный вызов — это обработка данных, которую вызываемый человек не запрашивал, поэтому мы записали в реестр, что было бы нужно для возможной повторной активации: документированное основание относительно вызываемого, учёт согласия и канал возражения.

Что получилось

Возможность по умолчанию закрыта и остаётся закрытой, пока кто-то не примет явное решение. Строка в реестре обработок описывает состояние, что было раньше, риск и условия повторной активации — так что следующему человеку, который найдёт маршрут, не нужно будет заново восстанавливать рассуждение.

Чего этот случай не говорит

Мы не обнаружили это инструментом. Мы нашли это, читая маршруты один за другим и спрашивая для каждого, кто его вызывает. Автоматический сканер увидел бы маршрут, который возвращает 400 на пустой запрос, и пошёл бы дальше. Это и есть предел метода: он покрывает то, что мы читаем, а то, что мы не читаем, остаётся непокрытым — поэтому домен устанавливается письменно.

Вопросы

О чём нас спрашивают перед тем, как позвонить

У вас есть сертификаты по безопасности?

Нет. Ни ISO 27001, ни SOC 2, ни сертификата по наступательному тестированию, ни аккредитации аудитора. Мы не выдаём сертификаты и не подписываем аттестаты соответствия. Что мы можем показать — это собственная практика, с файлом и строкой, и контрольные меры, которые мы внедрили в работающих системах. Если вам нужен сертификат для досье, вам нужен аккредитованный орган, не мы — и лучше узнать это сейчас.

Вы проводите тесты на проникновение?

Не как услугу. У нас нет команды наступательного тестирования, лицензии или сертифицированной методологии, и мы не притворяемся, что они есть. Что мы делаем — это анализ кода и конфигурации, а также неинвазивные проверки снаружи: заголовки, поведение на пределе частоты запросов, что утечают ответы об ошибках. Если проекту нужно настоящее наступательное тестирование, вам нужна специализированная компания; мы можем работать вместе с ней над исправлением.

Что вы обнаружили в собственных системах?

Три вещи, за один день анализа, все публично указанные в нашем реестре. Маршрут, который инициировал телефонный звонок на любой номер из тела запроса, анонимно, без аутентификации, который ни один компонент интерфейса больше не вызывал — теперь он отвечает 404, если секрет не настроен, то есть отключен, если кто-то не запустит его намеренно. Виджет беседы, который загружался при каждом просмотре и записывал сессию в память браузера до того, как посетитель что-либо запросит — теперь он загружается по нажатию кнопки. И полный IP-адрес, отправляемый в уведомлении, тогда как на публичной странице обещалась анонимизация — теперь он обрезается перед записью.

Ваша политика контента допускает `unsafe-eval`. Почему я должен вам верить?

Потому что мы вам это сказали, а не вы сами узнали. Да, политика этого сайта допускает `unsafe-inline` и `unsafe-eval` в скриптах — это реальная слабость, унаследованная из того, как загружаются некоторые сторонние скрипты, и именно это механизм, благодаря которому наш собственный аудит доступности внедрил инструмент проверки в production-страницу. В проекте, где ограничение задаем мы с самого начала, правильная форма — та, что используется на платформе обращений: уникальное значение на каждый ответ, генерируемое в proxy, и ни одного стороннего источника для скриптов. Разница между этими двумя вариантами — это ровно тот разговор, который нужно вести в начале проекта, а не в конце.

Как я могу проверить, не веря вам на слово, что ограничение скорости работает?

Отправив двенадцать последовательных запросов к маршруту интерфейса программирования этого сайта и посчитав ответы: первые девять проходят, десятый получает 429 с заголовком, который говорит, через сколько можно повторить. Окно — одна минута. Команда есть в списке источников этой страницы, и вы можете запустить ее сейчас. Тот же принцип мы применяем к тому, что поставляем: если контроль нельзя проверить извне клиентом, он не поставляется, он декларируется.

Что происходит с персональными данными из формы?

Они записываются в журнал с добавлением, по одному объекту на строку, с ограниченными правами на файл и каталог, до того, как будет предпринята попытка доставки — чтобы сломанный канал уведомлений не заставил запрос исчезнуть. IP-адрес обрезается до сетевого префикса перед записью. Файлы, старше заявленного срока, удаляются, при этом число дней берется из того же значения, которое указано в опубликованной политике. А строка в реестре обработок для каждого элемента говорит, в каком файле кода это реализовано.

Можете ли вы сделать аутентификацию с государственной электронной идентификацией или электронной подписью?

Код существует и протестирован, но нигде не активирован в production, и это различие важно. У нас написан поставщик услуг для федеративной аутентификации и клиент подписи, оба без новых зависимостей, с реализованными специфическими мерами защиты и с тестами. Чего не хватает, не относится к коду: договор с органом, сертификат системы и регистрация production-адреса. До этого момента рабочий сегодня вариант — тот, в котором гражданин подписывает на официальном портале и загружает обратно подписанный документ.

Какие меры контроля вы обычно закладываете в новое приложение?

Заголовки и политика контента с уникальным значением на каждый ответ; ограничение скорости с ключом, правильно взятым из-за proxy; разделение по организации, применяемое в базе, а не только в приложении; зашифрованные секреты и никогда не в ответах или журналах; ключи идемпотентности для событий от третьих сторон; обязательная двухфакторная аутентификация для учетных записей персонала; журнал аудита с отдельной видимостью для внутреннего и публичного доступа; и для публичных проектов — список разрешенных сетевых назначений, автоматически проверяемый при каждой поставке.

Что не покрывает этот сервис?

Безопасность корпоративной сети, устройства пользователей, непрерывный мониторинг типа операционного центра, реагирование на инциденты 24/7, криминалистическое расследование и обучение против фишинга. Это не то, что мы делаем плохо — это то, чего мы не делаем. Наша область — приложение, которое мы строим или берем на сопровождение, плюс данные, проходящие через него.

На чём основаны утверждения выше (24 источников)
  1. Verificat pe producție: 12 cereri consecutive dau 9 răspunsuri 200, apoi 429https://www.megapromoting.com/api/health/contact · 2026-09-06
  2. Antete pe producție: transport strict 63072000 s cu subdomenii și precarcare, tip de conținut nedeductibil, politică de referință restrânsă, politică de permisiuni care închide camera; încadrarea în cadru e refuzată complet pe rutele de interfață de programare și limitată la aceeași origine pe paginihttps://www.megapromoting.com/api/health/contact · 2026-09-06

22 из них — код и файлы из наших репозиториев. Мы не публикуем их название и строку: вместе, на одной странице, они слишком точно описали бы, как устроены системы, которые принадлежат не только нам. Мы разбираем их вместе с тобой, в репозитории, по запросу — проверка остаётся возможной, просто она проходит в разговоре.

Что вы хотели бы наладить?

Расскажите о своём процессе. Вместе определим, что стоит построить, что можно подключить и как проверим результат.

Давайте обсудим