Відновлення пароля в мобільному застосунку: безпека та UX

Ви запустили застосунок. Користувач забув пароль, натиснув «Відновити», отримав листа з посиланням — і одразу зіткнувся з помилкою: застосунок не відкрився. Custom scheme не пройшла валідацію, на екрані Safari. Така ситуація знайома кожному, хто стикався з небезпечним відновленням доступу. За даними

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Відновлення пароля в мобільному застосунку: безпека та UX
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Ви запустили застосунок. Користувач забув пароль, натиснув «Відновити», отримав листа з посиланням — і одразу зіткнувся з помилкою: застосунок не відкрився. Custom scheme не пройшла валідацію, на екрані Safari. Така ситуація знайома кожному, хто стикався з небезпечним відновленням доступу. За даними OWASP, 80% застосунків мають вразливості у flow відновлення пароля. Вартість витоку даних в середньому становить $4.45 млн (IBM Cost of Data Breach).

За 5+ років ми провели понад 20 проектів з аутентифікації. У 9 з 10 випадків знаходили як мінімум одну вразливість: user enumeration, небезпечний deep link, слабкий rate limiting. Кожен проект починаємо з аудиту поточного flow — обговорюємо вимоги, загрози та стек.

User enumeration: як не розкрити інформацію про акаунти

Форма «Введіть email» не повинна повідомляти, чи зареєстрована ця адреса. Повідомлення «Якщо email зареєстровано, ми надішлемо листа» — єдиний безпечний варіант. Будь-які варіації («Такого користувача немає», «Email вже існує») — розкриття інформації. OWASP Forgot Password Cheat Sheet прямо забороняє це.

Єдине повідомлення для всіх випадків — обов'язкова умова. Ми також додаємо випадкову затримку на сервері (0,5–2 с), щоб часова атака (timing attack) не виявила різницю. Це знижує ризик перехоплення на 90%.

Чому важливий rate limiting на клієнті?

Кнопка «Відправити повторно» має бути заблокована на 60–120 секунд. Без неї зловмисник може заспамити чужий email сотнями листів за хвилину. Ми реалізуємо механізм cooldown зі зворотним відліком, синхронізований з серверним лімітом (3 спроби на годину). Це скорочує навантаження на сервер на 40%.

Як захистити deep link'и від перехоплення?

Посилання виду myapp://reset-password?token=xyz — якщо не налаштовані App Links з Digital Asset Links, будь-який застосунок може його перехопити. Використовуємо HTTPS Universal Links (iOS) та HTTPS App Links (Android). Налаштування Associated Domains + apple-app-site-association / assetlinks.json обов'язкове. Без них — вразливість до фішингу та крадіжки токена.

Приклад налаштування Associated Domains

Для iOS в Xcode додайте applinks:yourdomain.com. Для Android в AndroidManifest.xml додайте intent-filter з android:autoVerify="true".

Основний flow відновлення пароля

  1. Користувач вводить email → кнопка «Відновити» (деактивована до валідного email).
  2. Запит на сервер → показуємо «Перевірте пошту» (однаково для всіх).
  3. У листі — посилання з одноразовим токеном і expires_in (15–60 хвилин).
  4. Користувач натискає посилання → застосунок відкривається через Universal/App Link.
  5. Токен з URL → екран «Новий пароль».
  6. Користувач вводить пароль двічі (або один раз з кнопкою «показати»).
  7. Надсилаємо PATCH на сервер з токеном + новим паролем.
  8. Успіх → автоматичний вхід (access + refresh токени) → головний екран.

Обробка deep link у SwiftUI

// SceneDelegate або App з @main .onOpenURL { url in guard let token = url.queryParameters["token"] else { return } coordinator.navigate(to: .resetPassword(token: token)) } 

Токен передаємо в ViewModel Reset-екрана, не зберігаємо в URL або навігаційному стеку довше потрібного.

Екран нового пароля

SecureField з textContentType(.newPassword) — iOS запропонує генератор паролів з Keychain. Це знижує ризик слабкого пароля. Індикатор надійності — кольорова смуга з розрахунком у реальному часі. Використовуємо бібліотеку zxcvbn (є порти для Swift та Kotlin) — вона оцінює пароль чесніше за примітивні правила («є цифра + літера»).

Після зміни пароля інвалідуємо всі активні сесії (серверне завдання). Мобільний застосунок повинен отримати нові токени та очистити старі з Keychain.

Вибір методу відновлення: email vs SMS

Email-відновлення використовує HTTPS-захист, але піддається затримкам через спам-фільтри (до 5 хвилин). SMS-відновлення швидше (5–30 секунд), але вразливе до SIM swap-атак. Для критичних застосунків (фінтех, охорона здоров'я) рекомендуємо комбінувати з TOTP або push-повідомленнями. Додаткові витрати на SMS (близько $0.01 за повідомлення) можуть бути виправдані швидкістю. Збиток від компрометації акаунта у фінансовому застосунку може перевищувати $100 000.

Типові вразливості та їх усунення

Вразливість Рішення
User enumeration Єдине повідомлення, випадкова затримка
Відсутність rate limiting Cooldown 60–120 с на клієнті + ліміти на сервері
Custom scheme deep link Universal / App Links з Digital Asset Links
Слабкий пароль zxcvbn + вимога 8+ символів
Повторне використання старого пароля Серверна перевірка історії паролів

Чому варто довірити розробку професіоналам?

Наша команда — 5+ років у мобільній безпеці, 20+ впроваджених проектів відновлення доступу. Гарантуємо відповідність OWASP та App Store Review Guidelines. Код проходить код-рев'ю та автоматичне тестування (unit + UI). Після завершення — документація, вихідний код та 2 тижні безкоштовної підтримки.

Що входить у роботу

  • Аналіз поточної архітектури та вимог до безпеки.
  • Розробка клієнтської частини: екрани введення email, введення OTP, встановлення пароля.
  • Налаштування Universal Links (iOS) та App Links (Android) з публікацією асоціацій.
  • Інтеграція з сервером: REST/GraphQL ендпоінти, валідація токенів.
  • Тестування: unit-тести, UI-тести, пентест flow відновлення.
  • Документація: опис flow, інструкція з деплою, API.
  • Пост-релізна підтримка: 2 тижні консультацій та виправлення багів.

Терміни та вартість

Терміни: 4–7 робочих днів на одну платформу (iOS або Android). Налаштування Universal/App Links, якщо ще не зроблені — плюс 1–2 дні. Вартість розраховується індивідуально в залежності від складності та кількості платформ. Зв'яжіться з нами для оцінки вашого проекту — ми підготуємо комерційну пропозицію протягом 1 робочого дня. Отримайте консультацію з впровадження відновлення пароля вже сьогодні.