Хранение значений Cookies в стандартной базе WebView
![]() |
Критичность: ВЫСОКИЙ |
Способ обнаружения: DAST, SENSITIVE INFO |
Описание
При использовании WebView со стандартными настройками (или неправильно сконфигурированного), все значения Cookie, которыми оперирует WebView будут сохранены в директорию приложения в специальной базе Cookie.db. При этом значения в данной базе никак не шифруются и доступны в открытом виде.
Несмотря на то, что данный файл находится во внутренней директории приложения, хранить сессионные идентификаторы и другие чувствительные данные, относящиеся к процессу аутентификации в открытом виде не рекомендуется. Получить данный файл можно несколькими способами, начиная от backup приложения, до эксплуатации других уязвимостей, позволяющих читать произвольные файлы в директории приложения.
Рекомендации
Для предотвращения хранения значений Cookie необходимо правильно настраивать WebView при создании. В случае, если до этого значения были сохранены их необходимо удалить.
Необходимо иметь ввиду, что на разных версиях Android SDK эта операция совершается по-разному. Ниже представлен пример кода, который реализует корректное очищение Cookie для всех версий Android:
webView.clearCache(true);
webView.clearHistory();
WebSettings webSettings = webView.getSettings();
webSettings.setSaveFormData(false);
// Not needed for API level 18 or greater (deprecated)
webSettings.setSavePassword(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
} else {
CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(this);
cookieSyncMngr.startSync();
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.removeSessionCookie();
cookieSyncMngr.stopSync();
cookieSyncMngr.sync();
}