Ответ
Дефект: Утечка данных между пользователями в мобильном приложении из-за некорректного кэширования.
Сценарий: Пользователь А выходит из аккаунта. Пользователь Б входит на том же устройстве, но видит персональные данные (историю заказов, имя) пользователя А.
Причина: Приложение агрессивно кэшировало ответы сетевого слоя в памяти по URL, без привязки к текущей сессии или пользователю. При логауте кэш не инвалидировался.
Псевдокод, иллюстрирующий проблему:
// Некорректная реализация кэша
class NetworkManager {
static var cache: [String: Data] = [:]
func fetchUserProfile() {
let url = "https://api.app.com/profile"
if let cachedData = NetworkManager.cache[url] { // БАГ: Кэш общий для всех!
return parse(cachedData)
}
// ... сетевой запрос
}
func logout() {
// Забыли очистить кэш: NetworkManager.cache.removeAll()
showLoginScreen()
}
}
Как обнаружили: Тестирование сценария безопасности "смена пользователя на одном устройстве".
Решение (фикс):
- Привязать ключ кэша к идентификатору сессии или пользователя.
- Инвалидировать весь пользовательский кэш при выходе из системы.
- Использовать более безопасные механизмы хранения (Keychain для чувствительных данных).
Вывод: Важно тестировать сценарии смены контекста (пользователь, сессия) и проверять очистку состояния приложения.