Включенное кэширование сетевых запросов
Критичность: ВЫСОКИЙ | |
Способ обнаружения: DAST, SENSITIVE INFO |
Описание
При использовании стандартной библиотеки для осуществления сетевого взаимодействия в iOS все сетевые запросы кэшируются в файловой системе устройства. Эти файлы кэша могут обладать интересными сведениями, включая запросы на аутентификацию, содержащие все учетные данные пользователя.
Несмотря на то, что данные файлы находятся во внутренней директории приложения, хранить сессионные идентификаторы и другие чувствительные данные, относящиеся к процессу аутентификации, в открытом виде не рекомендуется.
Рекомендации
Для отключения кэширования сетевых запросов необходимо воспользоваться одним из предложенных способов в зависимости от реализации:
-
Удалить общий кэш в любое время (например, при запуске приложения):
URLCache.shared.removeAllCachedResponses()
-
Отключить кэш на глобальном уровне:
let theURLCache = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil) URLCache.shared = theURLCache
-
Если используется объект NSURLConnection с делегатом, можно отключить кэш с помощью следующего метода:
func connection(_ connection: NSURLConnection, willCacheResponse cachedResponse: CachedURLResponse) -> CachedURLResponse? { return nil }
-
Создать URL-запрос, который не будет использовать кэш:
var request = NSMutableURLRequest(url: theUrl, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: urlTimeoutTime)
-
Также объект NSURLRequest имеет атрибут cachePolicy, который определяет работу с кэшем:
- UseProtocolCachePolicy — значение по умолчанию, кэширование зависит от HTTP заголовков.
- ReloadIgnoringLocalCacheData — кэш не используется.
-
Ну и один из самых простых вариантов — при открытии/закрытии приложения просто очищать эту базу сетевых запросов или удалять файл.