Аудит безпеки: найдорожча дірка була не в даних

Контроль доступу, платежі, шифрування й секрети пройшли аудит чисто. Дірка знайшлась в іншому: три з шести звернень до моделі йшли повз лічильник витрат. Ліміт переїхав в одне місце й тепер рахується неподільною операцією в базі.
Наприкінці серпня ми провели повний аудит сервісу за зовнішньою методикою. Не «перечитали код», а спробували зламати себе самі: модель загроз, карта довіри, полювання за класами вразливостей і окремий прогін на ізоляцію практик - чи бачить лікар А хоч один байт із практики лікаря Б.
Контроль доступу, платежі, шифрування полів і секрети в історії коду пройшли чисто. Дірка знайшлась зовсім в іншому місці.
Три з шести звернень до моделі йшли повз лічильник
Обмеження на платні запити жило в коді, який ці запити робить, а не в самому шарі ШІ. Через це кожна нова функція народжувалась без ліміту: розбір заявки рахувався, а розпізнавання аналізів і генерація тесту - ні.
Лагодили корінь, а не випадки
Ліміт переїхав в одне місце, через яке проходять усі шість точок, і рахується однією неподільною операцією в базі. Якщо база недоступна, запит не проходить: тут це правильна поведінка, бо за пропущеним викликом стоять живі гроші.
Окремий тест стереже, що запобіжник саме підключений до кожної функції, а не написаний поруч. У цьому проєкті вже жила готова функція, яку ми написали й жодного разу не викликали, - типи, лінтер і тести такого не бачать, бо мертва функція нікому не заважає.
Що це означає для лікаря
Хочете спробувати на своїй аудиторії? Створіть кабінет - перші дні безкоштовно, картка не потрібна.
Читайте також
Перша версія Doclink запрацювала на справжньому сервері
Три тижні роботи: сторінка лікаря, тест-знайомство, календар, картка пацієнта й ШІ-розбір аналізів. Ще без домену й навіть без назви.
Чотири способи приймати оплати і бот, який пояснює себе
monobank, LiqPay, WayForPay або власне платіжне посилання. Плюс вхід через Google і Telegram-бот, який прямо каже пацієнту, що лікар цей чат не читає.
Сайт і кабінет заговорили англійською, зʼявилась нічна тема
Два перемикачі в правому куті: мова й тема. Приблизно 2600 рядків інтерфейсу, від лендінгу до адмінки, і один урок про те, чому зелена перевірка нічого не доводить.