Перейти до основного вмісту
megapromotingПоговорімо

Expertiză · Кібербезпека

Безпека застосунків, які ми будуємо й експлуатуємо — контролі, записані в коді, перевірні ззовні, без сертифікацій, яких у нас немає.

Робота охоплює безпеку застосунку та інженерію конфіденційності: заголовки і політику контенту, обмеження частоти, за замовчуванням закриту позицію перевірок, шифрування секретів, журнали, які не можна переписати, анонімізацію даних і строки зберігання, закладені в код, а не лише в політику. Ми не є сертифікованими аудиторами і не видаємо сертифікатів.

Вже збудовано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.

Більшість дірок, які ми знаходили у власних системах, не були складними експлойтами. Це були значення за замовчуванням. Маршрут, який ініціював телефонний дзвінок на будь-який номер без автентифікації, який жоден компонент інтерфейсу вже давно не викликав. Перевірка джерела, що проходила, коли список був порожній. Повна IP-адреса, надіслана в повідомленні сповіщення, тоді як публічна сторінка обіцяла анонімізацію. Усе три було написано в нашому коді, і жодне не було б видно в автоматичному сканері.

Звідси походить форма послуги. Ми не продаємо звіт сканування. Ми читаємо код із точним запитанням: коли ця перевірка не може вирішити, що вона робить — дозволяє чи відхиляє? Позиція за замовчуванням — це різниця між брамою і декорацією. У наших системах брама споживання повертає «недозволено» при винятку, а маршрут телефонного виклику відповідає 404, якщо секрет не налаштовано — тобто функцію вимкнено, якщо хтось не увімкнув її навмисно.

Друга половина роботи — це інженерія конфіденційності, бо на практиці ці дві речі не розділяються. Заявлений публічно термін зберігання нічого не означає, якщо його не застосовує код. У нас журнал запитів видаляє файли, старіші за заявлений термін, а число днів береться з того самого значення, що й у опублікованій політиці. В іншій системі таблиця ретенції тримає поруч із кожним терміном опублікований текст, слово в слово, і правову підставу — щоб політика і база даних не могли тихо розійтися одна з одною.

Те, що ми публікуємо про себе, є частиною методу. Політика вмісту цього сайту дозволяє `unsafe-inline` і `unsafe-eval` у скриптах. Це реальна слабкість, і ми пишемо її тут, а не у внутрішньому звіті — саме це було механізмом, завдяки якому наш власний аудит доступності зміг інжектувати інструмент перевірки прямо на продуктивну сторінку. Постачальник, який не публікує власних відомих слабкостей, не може знайти ваші.

Що входить

Робота, за складовими

Ми читаємо позицію за замовчуванням кожної перевірки

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

Правильне обмеження швидкості за проксі

Десять запитів на хвилину на адресу, з нюансом, який визначає, чи працює ліміт: ключ береться з останнього хопа заголовка пересилання, а не з першого. Наш proxy додає реальну адресу в кінець того, що надіслав клієнт, отже перший запис контролюється атакувальником — хто формує ключ за ним, може перевищити свій ліміт, надсилаючи випадкові значення. Це можна перевірити ззовні: дванадцять послідовних запитів дають дев’ять успішних відповідей, потім 429.

Заголовки та політика вмісту, з унікальним значенням на відповідь там, де це можливо

На цьому сайті: суворий транспорт на два роки з піддоменами та внесенням до списку попереднього завантаження, недедуктивний тип вмісту, обмежена політика реферера, політика дозволів, яка закриває камеру і залишає мікрофон та геолокацію лише для власної сторінки. На платформі скарг — суворіше: політика вмісту отримує унікальне значення для кожної відповіді, згенероване в проксі, без сторонніх джерел для скриптів, з’єднань або шрифтів, а вбудовування в кадр повністю відхиляється.

Білий список мережевих призначень, перевірений автоматично

У публічному проєкті те, з якими адресами застосунок має право контактувати, — це список, перевірений командою, що запускається в безперервній інтеграції, як статично, так і під час виконання. Новий пакет, який починає телефонувати додому, провалює перевірку, а не потрапляє в продукцію. Це контроль, який ловить саме той клас інцидентів у ланцюгу постачання, від яких ніхто не захищається сканером вразливостей.

Секрети не потрапляють у відповіді, журнали чи сповіщення

Сонда здоров’я форми контакту повертає лише логічні значення — чи налаштовано, чи дійсні облікові дані, чи можна записати журнал — ніколи не токен, ідентифікатор розмови або назву бота. Токени каналів платформи обміну повідомленнями зберігаються в зашифрованому вигляді. Журнали сповіщень проходять через модуль редагування персональних даних перед записом.

Анонімізація застосовується перед записом, а не після

IP-адреса обрізається до мережевого префікса — /24 для IPv4, /48 для IPv6 — перед тим, як потрапити до журналу або сповіщення. Дві деталі, які мають значення: береться останній хоп, а не перший, з тієї самої причини, що й при обмеженні швидкості; і IPv4-адреси, подані у вигляді, зіставленому з IPv6, розпізнаються та обробляються як 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

Дані

Чого торкаємося, де воно лежить і скільки лишається

Запитання, які ставить кожен, у кого є відповідальний за захист даних, — поставлені тут раніше, ніж їх поставить він.

Що ми охоплюємо в аналізі
Код, конфігурацію сервера, заголовки відповідей і, де доречно, схему бази даних та політики доступу по черзі. Нам не потрібні реальні дані клієнтів, щоб провести аналіз, і ми воліємо взагалі до них не торкатися.
Що ми не робимо без письмово дозволеного домену
Жодної дії, яка створює трафік проти системи, що працює. Перевірки на продакшені, згадані на цій сторінці, — це звичайні запити на читання, на власних системах. Будь-яке перевищення цього ліміту потребує письмового дозволу із зазначенням періоду та адрес, підписаного тим, хто має право його надати.
Куди потрапляють висновки
У документ із одним висновком на рядок: де він, що з ним можна зробити, що саме це виправляє і як перевіряється виправлення. Висновки, що описують шлях експлуатації, не передаються через незахищені канали і не потрапляють у публічні матеріали до виправлення.
Реєстр обробок
Щодо конфіденційності результат — це реєстр з одним рядком на дію: мета, підстава, категорії даних, отримувачі, передачі, місце зберігання, строк, заходи та файл у коді, де це реалізовано. Те, що не вдалося перевірити, записується як «неперевірено», а не заповнюється за шаблоном.
Правило, яке тримає політику поруч із кодом
Якщо зміна коду змінює, що збирається, кому це надходить або як довго зберігається, опублікована політика змінюється в тому самому кроці постачання. Розбіжність між опублікованою політикою та кодом була саме тією проблемою, через яку ми написали власний реєстр.

Випадок

Забутий маршрут, який міг подзвонити будь-кому

Ситуація

Під час ревізії власного сайту ми натрапили на маршрут інтерфейсу програмування, який ініціював телефонний дзвінок на будь-який номер, надісланий у тілі запиту. Без автентифікації, за рахунок і з номера компанії. Жоден компонент інтерфейсу його більше не викликав — єдиним викликачем був елемент, який уже не відображався. Тобто він працював відкрито для інтернету, і ніхто не мав підстав дивитися на нього.

Що ми збудували

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

Що вийшло

Можливість за замовчуванням вимкнена і залишається вимкненою, доки хтось не ухвалить явне рішення. Рядок у реєстрі обробок описує стан, що було раніше, ризик і умови повторного ввімкнення — тож наступній людині, яка знайде маршрут, не доведеться відтворювати міркування.

Чого цей випадок не каже

Ми не зрозуміли це за допомогою інструмента. Ми знайшли це, читаючи маршрути один за одним і запитуючи для кожного, хто його викликає. Автоматичний сканер побачив би маршрут, який повертає 400 на порожній запит, і пішов би далі. Це й обмеження методу: він охоплює те, що ми читаємо, а те, що не читаємо, залишається поза охопленням — тому домен визначається письмово.

Питання

Про що нас питають, перш ніж зателефонувати

У вас є сертифікації з безпеки?

Ні. Ні ISO 27001, ні SOC 2, ні сертифікації з наступального тестування, ні акредитації аудитора. Ми не видаємо сертифікати і не підписуємо атестати відповідності. Те, що ми можемо показати, — це власна практика з файлом і рядком, а також контролі, які ми впровадили в системах, що працюють. Якщо вам потрібен сертифікат для справи, вам потрібен акредитований орган, а не ми — і краще дізнатися це зараз.

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

Не як послугу. У нас немає команди наступального тестування, ліцензії чи сертифікованої методології, і ми не вдаємо, що маємо. Ми робимо аналіз коду та конфігурації, плюс неінвазивні перевірки зовні — заголовки, поведінку на межі частоти, що витікає з помилкових відповідей. Якщо проєкт справді вимагає наступального тестування, вам потрібна спеціалізована компанія; ми можемо працювати поруч із нею над виправленням.

Що ви знайшли у власних системах?

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

Ваша політика вмісту дозволяє `unsafe-eval`. Чому я маю вам вірити?

Тому що це ми вам сказали, а не ви це з’ясували. Так, політика цього сайту дозволяє `unsafe-inline` і `unsafe-eval` у скриптах — це реальна слабкість, успадкована з того, як завантажуються певні сторонні скрипти, і це саме той механізм, через який наш власний аудит доступності інжектував інструмент перевірки на виробничу сторінку. У проєкті, де обмеження задаємо ми з самого початку, правильна форма — та, що в платформі звернень: унікальне значення на відповідь, згенероване в проксі, і жодного стороннього джерела для скриптів. Різниця між цими двома варіантами — це саме та розмова, яку треба вести на початку проєкту, а не наприкінці.

Як я перевірю, не вірячи вам на слово, що обмеження частоти працює?

Надіславши дванадцять послідовних запитів до маршруту інтерфейсу програмування цього сайту і порахувавши відповіді: перші дев’ять проходять, десятий отримує 429 із заголовком, що показує, через який час можна спробувати ще раз. Вікно — одна хвилина. Команда є у списку джерел цієї сторінки, і ви можете запустити її зараз. Такий самий принцип ми застосовуємо до того, що постачаємо: якщо контроль не можна перевірити ззовні клієнтом, його не постачають, а декларують.

Що стається з персональними даними з форми?

Вони записуються в журнал із доповненням, по одному об’єкту в рядку, з обмеженими правами на файл і каталог, перед спробою доставки — щоб зіпсований канал сповіщення не зробив так, що запит зникне. IP-адреса обрізається до мережевого префікса перед записом. Файли, старіші за заявлений строк, видаляються, а кількість днів береться з того самого значення, що в опублікованій політиці. А рядок у реєстрі обробок каже для кожного елемента, в якому файлі в коді це реалізовано.

Чи можете ви зробити автентифікацію через державну електронну ідентичність або електронний підпис?

Код існує і протестований, але не активований ніде в продукції, і ця різниця має значення. У нас написано постачальника послуг для федеративної автентифікації та клієнт підпису, обидва без нових залежностей, з реалізованими специфічними захистами і з тестами. Чого бракує — це не код: договір з органом, системний сертифікат і реєстрація виробничої адреси. Аж до того моменту робочий сьогодні варіант — той, де громадянин підписує на офіційному порталі і завантажує підписаний документ назад.

Які контролі ви зазвичай ставите в новому застосунку?

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

Що не покриває ця послуга?

Безпека корпоративної мережі, обладнання користувачів, безперервний моніторинг типу операційного центру, реагування на інциденти 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 з них — це код і файли з наших репозиторіїв. Ми не публікуємо їхні назви чи номери рядків: разом, на одній сторінці, це надто точно описало б, як побудовані системи, які належать не лише нам. Ми проходимо їх разом із вами, у репозиторії, за запитом — перевірка залишається можливою, просто вона відбувається в розмові.

Що вам хотілося б налагодити?

Розкажіть про свій процес. Разом визначимо, що варто збудувати, що можна підключити і як перевіримо результат.

Поговорімо