Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!30.10.2024
Ніколи не довіряй клієнту
Натрапив на статтю про вразливості британського застосунку для знайомств Feeld. Особливо цікаво стало, коли дізнався, що цей застосунок підняв 40 млн фунтів доходів за 2023, тож це не невідома поробка - можна уявити, скільки там користувачів.
Вразливості, одним реченням, зводилися до того, що авторизація відбувалася в клієнтському застосунку. Проблеми тут дві. Перша — головна — що застосунок спілкується з сервером через вільний інтернет, тому це спілкування можна як підслухати, так і підробити. Друга — навіть якщо ви зробили цьому перешкоди в клієнті, то будь-який клієнт можна розібрати, щоб знайти та відтворити всі механізми захисту. Це я кажу як людина, яка заглядає всередину іграшок десь стільки ж років, скільки їх збирає.
☝️ Сервер ніколи не може бути впевнений, що відповідає на запити справжнього клієнта. Це аксіома інтернету. Звідси висновок: запити клієнта та відповіді сервера мусять завжди бути авторизовані щодо поточного автентифікованого користувача. На сервері!
Коли тримаєш це в голові, не так важко зробити правильний архітектурний вибір. Звісно, сучасні тенденції його ускладнюють. Зокрема GraphQL суттєво заплутує обставини доступу до сутностей, як викладено в цій статті. Проте принаймні я не зустрічався з проєктами, де не зрозуміло, де межа сервера та клієнта — тобто де потрібно застосувати цю аксіому про недовіру.
Я великий фанат Firebase та аналогічних рішень про “бекенд без коду”. Тут клієнт ніби “пише прямо в базу”. Втім, у Firebase теж є щільний набір безпекових правил, які обмежують дії клієнтів. Робити проєкт на Firebase без цих правил — так само божевілля.
Окремо стоять “рідні” застосунки, бо вони виглядають цільнішими та, на перший погляд, їм можна довіряти. Це самообман, рідні застосунки наділені такими ж вразливостями. Критерій “клієнта” лише один — чи виконується код в оточенні, яке ми не контролюємо? Все, що там, в будь-який момент перетвориться на агента з Матриці. 🕴️