2021-06-10 10:48:01
Security driven by user intentВ 2010 году мне повезло оказаться на эпловском WWDC в Сан-Франциско. Заодно, это была моя первая поездка в штаты. Тогда Джобс был еще жив и показал самый красивый айфон всех времен: четверку, где корпус состоял из стальной антенны, зажатой двумя кусками стекла, а внутри был их первый собственный процессор, который оказался началом конца тридцатилетней эпохи доминирования Интела.
Но самое большое впечатление на меня произвело выступление Ивана Крстича, главного по архитектуре безопасности в Эппле. Иван рассказал как они начинают внедрять сэндбокс («песочницу») на маках после трех лет его успешного использования на айфонах. Песочница — это такая штука для изоляции приложений, чтобы они не могли иметь доступа к данным других приложений или каким-то личным пользовательским файлам. Айфон с самого первого дня был задизайнен так, чтобы приложения почти никак не могли друг с другом общаться, да это им и не особо нужно было. А вот маки и прочие писюки всю жизнь строились по принципу «вот тебе, апп, диск со всеми моими файлами — используй по своему разумению». Пока компьютеры были печатными машинками, это еще кое-как работало, но когда все оказались в интернете, а внутри компьютера оказалась вся твоя жизнь, не очень-то хочется любому случайному программисту доверять все свое цифровое богатство.
Амбициозность OS X Lion тогда заключалась в том, чтобы начать плавно переводить макось на модель изоляции приложений как в айфоне, не ломая мудреные сценарии, к которым пользователи привыкли. Иван тогда сформулировал философию «политика безопасности управляется намерением пользователя».
Пример: приложение сидит в песочнице и не видит никаких файлов кроме своих личных. Пользователь перетаскивает файл на иконку и система «протыкает дыру» в фаерволе только для этого файла, выдавая приложению право доступа к нему. Для человека все работает так же, как и прежде, но приложение не видит никаких других папок и файлов, которые в нем не открывали.
С перетаскиванием все понятно, а с панелькой File->Open нужна хитрость. Все привыкли что из приложения можно открыть окошко недо-файндера для выбора файла, где есть привычный сайдбар и список всех файлов. Но как приложение сможет нарисовать все твои файлы, если у него нет к ним доступа? Для этого в систему завезли фичу под названием PowerBox, которую уже внедряли в айфоне для выбора фоточек. Приложение показывает рамку от окна выбора файла, а содержимое рисует система, поверх окна приложения. Приложение видит пустоту, а пользователю кажется, что это обычная родная панель. Когда файл выбран, система выдает его адрес приложению вместе с разрешением доступа. Похожая система используется и для других выбиралок: адресной книги и фоточек.
Позже эпплы немного сошли с праведного пути и внедряли дурацкие вопросы «разрешить доступ к XYZ?» вместо того, чтобы использовать этот самый пресловутый intent. Типичный пример — геолокация и микрофон. Правильный подход был бы внедрить какую-то системную кнопку, которая рисуется поверх всего приложения, и которую может нажать только пользователь, но не программа. Например, кнопка камеры или микрофона. Нажал — заработало. Не нажал — не заработало. Но нет, последние несколько лет эпплы высыпали запросики и с каждым годом вводили дополнительные навороты к ним.
Но на WWDC'21, наконец, прогресс опять пошел вперед. Для геологации ввели CLLocationButton: системная кнопка для выдачи доступа к координатам без замудренных окошек. Надеюсь, для других датчиков (микрофона и камеры, в первую очередь) введут подобные штуки в следующих сериях.
https://developer.apple.com/wwdc21/10102
100 views07:48