Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

NSURL *documentFolderUrl = [fileManager URLForDirectory: NSDocumentDirectory

inDomain: NSUserDomainMask

appropriateForURL: nil

create: YES

error:&error];

if (error == nil && documentFolderUrl!= nil){

NSString *fileName = @"MyFile.txt";

NSString *filePath = [documentFolderUrl.path

stringByAppendingPathComponent: fileName];

return filePath;

}

return nil;

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

/*

Предпосылки:

1) подписать
приложение валидным профилем инициализации;

2) в вашем профиле должна быть активизирована полная защита файла;

3) добавить в проект разрешения на подписывание кода.

*/

NSFileManager *fileManager = [[NSFileManager alloc] init];

if ([self filePath]!= nil){

NSData *dataToWrite = [@"Hello, World"

dataUsingEncoding: NSUTF8StringEncoding];

NSDictionary *fileAttributes = @{

NSFileProtectionKey: NSFileProtectionComplete

};

BOOL wrote = [fileManager createFileAtPath: [self filePath]

contents: dataToWrite

attributes: fileAttributes];

if (wrote){

NSLog(@"Successfully and securely stored the file");

} else {

NSLog(@"Failed to write the file");

}

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

Пользователи доверяют вашим приложениям. Поэтому, когда вы запрашиваете у пользователя определенную личную информацию, например имя и фамилию, пользователь рассчитывает, что эта информация будет храниться в хорошо защищенном месте, где до нее не доберутся хакеры или кто-нибудь, кто получает временный доступ к пользовательскому устройству с iOS.

Предположим, вы пишете приложение для редактирования фотографий. Работая с этим приложением, пользователь может подключить камеру к своему устройству с iOS, импортировать свои фотографии в ваше приложение, а потом пользоваться им для редактирования, сохранения фотографий и раздачи их друзьям. Вы могли бы поступить так, как делают очень многие разработчики приложений: импортировать эти фотографии в папку Documents (Документы), где они сразу будут готовы к редактированию. Но с таким подходом связана одна проблема: любой файловый менеджер для iOS, который можно свободно скачать в Интернете, может считывать содержимое папки Documents (Документы) в любом приложении, даже если устройство заблокировано. Чтобы защитить пользовательские данные, следует активизировать защиту тех файлов, которые вы храните в песочнице приложения. Защита файлов — неотъемлемая часть безопасности пользовательского устройства, в частности, пароля к этому устройству. Допустим, пользователь установил на устройстве пароль, без которого устройство нельзя разблокировать (пусть даже этот пароль совсем простой), и такая блокировка произошла. В таком случае после того, как устройство будет заблокировано,

все файлы, сохраненные в песочнице вашего приложения и обладающие ключом NSFileProtectionComplete, будут недоступны для посторонних. Прочитать такие файлы не сможет даже файловый менеджер.

Итак, при релизе вашего приложения и даже на этапе его разработки задавайте профили для разработки и распространения программы так, чтобы в них действовала необходимая защита файлов, распространяющаяся на конфиденциальные файлы, находящиеся на диске. Сами определите, какие файлы нуждаются в защите от непрошеных зрителей. Остальные файлы на диске можно и не защищать.

См. также

Разделы 8.0 и 8.6.

8.9. Защита пользовательского интерфейса

Постановка задачи

Необходимо гарантировать, что пользовательский интерфейс соответствует наиболее распространенным правилам безопасности, действующим в iOS.

Решение

Следуйте приведенным далее указаниям.

• Обеспечьте, чтобы вся информация, вводимая пользователем в поля паролей и другие защищенные поля, попадала в экземпляры UITextField, чьим свойствам secureTextEntry присвоено значение YES.

• Если пользователь находится на экране, содержащем персональную информацию, например номер кредитной карточки или домашний адрес, присвойте свойству hidden главного окна вашего приложения значение YES (в методе applicationWillResignActive: делегата вашего приложения). Чтобы само окно отображалось на экране, тому же самому свойству нужно присвоить значение NO в методе applicationDidBecomeActive: делегата приложения. Так вы гарантируете, что на скриншоте пользовательского интерфейса (iOS снимает такой скриншот, когда приложение переходит в фоновый режим) не будет отражаться никакое содержимое вашего окна. Apple рекомендует действовать именно так.

• Обязательно валидируйте пользовательский ввод в текстовых полях/видах перед отправкой этой информации на сервер.

• Пользуясь механизмами, изученными в этой главе, защищайте пользовательские записи, если храните их в файлах на диске или в связке ключей.

• На тех экранах, где вы принимаете пароль или числовой код для аутентификации, очищайте такие поля с кодом/паролем, как только контроллер вида перестает отображаться на экране. Если вы не будете уступать и высвобождать эти контроллеры видов, их содержимое будет сохраняться в памяти. В частности, в памяти будут находиться записи из защищенных текстовых полей, находящихся в этих контроллерах видов. Целесообразно высвобождать память, содержащую конфиденциальные данные, сразу же после того, как исчезает необходимость в этих данных.

Обсуждение

В этом списке лишь второй элемент требует дополнительного объяснения. Когда пользователь видит окно приложения на экране своего устройства с iOS и переводит это приложение в фоновый режим, возвращаясь на главный экран (нажимая Home), iOS помещает приложение в неактивное состояние. Когда приложение в таком состоянии переведено в фоновый режим, iOS делает скриншот пользовательского интерфейса этого приложения (в точном соответствии с изображением на экране) и сохраняет этот файл в каталоге Library/Caches/Snapshots/. Данный каталог находится в песочнице вашего приложения. Как только пользователь вновь переводит приложение в приоритетный режим, iOS сразу же отображает этот скриншот, и он остается на экране до тех пор, пока приложение не «оживет» окончательно и не примет управление экраном. Поэтому переход из фонового в приоритетный режим в iOS получается очень плавным. Но хотя такая практика и очень положительна с точки зрения удобства использования (UX), она привносит определенную проблему в области безопасности. Дело в том, что если на скриншоте была зафиксирована конфиденциальная информация, то она будет сохранена и на диске. Мы не можем полностью отключить эту функцию в iOS, однако можем нейтрализовать ее негативное влияние на безопасность приложения. Чтобы это сделать (кстати, такая практика рекомендуется Apple), нужно накрыть основное окно нашего приложения другим видом либо скрыть содержимое этого окна, устанавливая свойство hidden окна приложения в значение YES, когда приложение становится неактивным. При переходе приложения в активное состояние мы вновь присваиваем этому свойству значение NO (и окно снова становится видимым).

Поделиться:
Популярные книги

Дважды одаренный. Том IV

Тарс Элиан
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
7.50
рейтинг книги
Дважды одаренный. Том IV

Темные врата

Грановский Антон
7. Гиблое место
Фантастика:
фэнтези
7.69
рейтинг книги
Темные врата

Похорони Меня Ложью

Сото С. М
2. Двойная Ложь
Детективы:
триллеры
5.00
рейтинг книги
Похорони Меня Ложью

Основы логистики

Левкин Григорий Григорьевич
Деловая литература:
экономика
отраслевые издания
5.00
рейтинг книги
Основы логистики

Питомник. Книга 1

Дашкова Полина Викторовна
Детективы:
триллеры
8.70
рейтинг книги
Питомник. Книга 1

Учитель истории

Ибрагимов Канта
Проза:
военная проза
историческая проза
4.00
рейтинг книги
Учитель истории

Мир приключений 1984 г.

Ефимов Е.
Альманах "Мир приключений"
Фантастика:
научная фантастика
5.00
рейтинг книги
Мир приключений 1984 г.

Слово авторитета

Сухов Евгений Евгеньевич
Я – вор в законе
Детективы:
боевики
7.77
рейтинг книги
Слово авторитета

Кости волхвов

Роллинс Джеймс
2. Отряд «Сигма»
Детективы:
триллеры
9.10
рейтинг книги
Кости волхвов

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Играть... в тебя

Газлайтер. Том 18

Володин Григорий Григорьевич
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
6.80
рейтинг книги
Газлайтер. Том 18

Светорада Янтарная

Вилар Симона
3. Светорада
Любовные романы:
исторические любовные романы
8.74
рейтинг книги
Светорада Янтарная

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Маленькое одолжение

Батчер Джим
10. Досье Дрездена
Фантастика:
ужасы и мистика
8.77
рейтинг книги
Маленькое одолжение