Может ли одно приложение на Android читать временные файлы другого приложения?
В андроид есть общая директория, по-моему /phone
Туда пишут временные файлы все приложения, когда приложение удаляешь, данные от него там остаются, если разработчик не позаботился о том чтобы их удалить.
Есть вопросы:
1) by design система не удаляет эти временные файлы из этой директории?
2) android не знает какие файлы какому приложению принадлежат?
3) может ли одно приложение прочесть данные другого приложения из этой директории, тогда это дыра в безопасности?
В Андроиде каждое приложение выполняется от отдельного пользователя Unix, и обладает правами этого пользователя. Для разделения прав используется система пользователей и групп. /data достаточно четко разделен по правам - не обладая root правами приложения не видят даже какие файлы там есть.
Погодите, вот я только что скачал файловый менеджер из google.play и читаю временные файлы из директории популярного сессенджера, а там фотографии, которые мне прислали лежат в незашифрованом виде.
читаю временные файлы из директории популярного мессенджера, а там фотографии, которые мне прислали лежат в незашифрованом виде, устройство у меня не рутованое.
По какому пути находятся эти файлы? Если они в произвольной директории на разделе, который в fat32, то к ним нельзя применить разделяемый доступ. Поэтому, надо уточнять, что именно Вы понимаете под "временными файлами"
По пути /sdcard, здесь временные файлы всех установленных приложений на моем устройстве: мессенджеров, sip телефонии, браузеров, плееров с их плейлистами, соц сетей.
Под временными файлами я понимаю одно, а разработчики приложений видимо другое, если разработчики мессенджера с многомилионной аудиторией там хранят незашифрованные фотографии и зашифрованную переписку.
irve: Да, вопрос хранения файлов там - исключительно на совести программистов. Для андроид - это все "внешние данные". Т.к. для упрощения монтирования этих разделов на разных ОС при подключении к компьютеру, исторически был выбран формат fat32 - разделение доступа на уровне ФС не получится. Поэтому, если в манифесте у приложения есть разрешение на доступ к SD-Card - да, это приложение может найти нужные ему директории и что-то сделать с файлами в них.
Кир aka Dober: То есть кто-то может разместить google.play "игру 2048 - играй по сети с друзьями" и таскать фотографии обнаженных девушек с Вашего телефона?
irve:
Да, если у нее есть разрешение в манифесте READ_EXTERNAL_STORAGE. Предпологалось, что на внешнем хранилище не будут жить критичные данные. В принципе, там тоже есть разделение на Public/Private files, но это не разделение доступа, а указание писать их в именную директорию приложения, которую менеджер пакетов удалит после анинстала.
Можете пробежать эту статью: microsin.net/programming/android/saving-files.html - там общий подход с простейшими примерами
В чем дыра? Что значит не могут выложить в интернет архив с каталогом /storage/sdcard? Доступ к /sdcard дается по пермишену READ_EXTERNAL_STORAGE. Есть пермишен значит можно читать все что угодно от туда и выкладывать в интернет если захочется. Все секьюрные данные хранятся во внутренней памяти приложений, в /data/data//. Какие секьюрные данные вы обнаружили на sdcard? Какие БД или shared_preferences может с токенами авторизации? Фото и видео невозможно хранить во внутренней памяти потому что она быстро забьется, а так же к ним не будет доступа для других приложений типа галерей.
фотографии людей, которые их мне прислали
мои запланированные дела
мои sip аккаунты
записи моих телефонных разговоров
список можно продолжать бесконечно
Вы не можете выложить в интернет архив с каталогом /storage/sdcard со своего android устройсва, которым Вы пользуетесь.