Как защитить NSUserDefaults?

Kodak Digital Cinema System (и я не просто говорю это, потому что я записал о 1/3-м из него включая большинство gui.)

17
задан erotsppa 13 October 2009 в 15:01
поделиться

7 ответов

Честно говоря, это не проблема, если вы не хотите хранить что-то в NSUserDefaults , которое следует держать в секрете от пользователя. Пользователи на самом деле не входят в свои предпочтения и не редактируют их напрямую, если только там нет чего-то скрытого, что нельзя изменить через пользовательский интерфейс (например, скрытые настройки, которые Apple не дает вам пользовательского интерфейса для изменения, но которые имеют реальные , стабильные, полезные эффекты при изменении).

0
ответ дан 30 November 2019 в 11:27
поделиться

для iPhone? Они не могут изменить эти переменные, нет Terminal.app, чтобы это изменить (кроме устройств с взломом, но это проблема Apple, а не вас). Для настольных приложений вы можете закодировать их с помощью NSData, и они будут заархивированы как base 64.

-1
ответ дан 30 November 2019 в 11:27
поделиться

Вы можете хранить действительно безопасные данные в связке ключей iPhone. Альтернативой этому являются ваши собственные классы шифрования (могут ограничивать распространение приложений) или обфускация с помощью другой кодировки, такой как nsdata, base64 и т. Д.

4
ответ дан 30 November 2019 в 11:27
поделиться

NSUserDefaults должен содержать только те параметры, которые вы хотите, чтобы ваш пользователь мог изменять. Внутренние данные приложения не должны находиться в NSUserDefaults. Сохраните свои внутренние данные в NSDictionary и запишите их в отдельный файл в документах приложений или в папке tmp.

NSDictionary* dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
BOOL succeeded = [dict writeToFile:[self dbFullPathName] atomically:YES];
4
ответ дан 30 November 2019 в 11:27
поделиться

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

2
ответ дан 30 November 2019 в 11:27
поделиться

Я написал простой в использовании и маленькая категория именно для этой цели. Работает на iPhone и Mac OS X, бесплатно и по лицензии MIT. Вы можете найти его на github: SecureUserDefaults

9
ответ дан 30 November 2019 в 11:27
поделиться

Если часть данных не чувствительна (например, размер шрифта по умолчанию), храните его в nsuserdefaults.

Если он должен быть защищен от случайных Snooping (например, пароль пользователя), храните его в брете.

Если он должен быть защищен от пользователя (e.g., регистрационный код), вам нужно будет закатить собственное шифрование, а затем хранить данные, где вам нравится.

22
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: