БезпекаDoclink editorial2 min read

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

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

Наприкінці серпня ми провели повний аудит сервісу за зовнішньою методикою. Не «перечитали код», а спробували зламати себе самі: модель загроз, карта довіри, полювання за класами вразливостей і окремий прогін на ізоляцію практик - чи бачить лікар А хоч один байт із практики лікаря Б.

Контроль доступу, платежі, шифрування полів і секрети в історії коду пройшли чисто. Дірка знайшлась зовсім в іншому місці.

Три з шести звернень до моделі йшли повз лічильник

Обмеження на платні запити жило в коді, який ці запити робить, а не в самому шарі ШІ. Через це кожна нова функція народжувалась без ліміту: розбір заявки рахувався, а розпізнавання аналізів і генерація тесту - ні.

Лагодили корінь, а не випадки

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

45
одночасних спроб запускає тест при стелі 20
20
рівно стільки проходить - це і є доказ

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

Що це означає для лікаря

Want to try it on your own audience? Create a cabinet — the first days are free, no card needed.

Read next