Подтвердить что ты не робот

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

Apple советует использовать NSUserDefaults для хранения всех ваших настроек приложения. Однако, похоже, NSUserDefaults очень легко редактируется. Есть ли способ обеспечить это. Я не ищу способ сделать его невозможным для редактирования, просто сделав его более сложным, чтобы пользователи не испытывали соблазна изменить внутренние переменные приложения.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

NSDictionary* dict = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
BOOL succeeded = [dict writeToFile:[self dbFullPathName] atomically:YES];

Ответ 5

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

Ответ 6

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

Ответ 7

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