EasySwift iOS🍏
3.02K subscribers
269 photos
8 videos
396 links
Все самое интересное в мире iOS разработки 🧑🏻‍💻

Предложить статью или новость: @EasySwiftBot

По всем вопросам обращаться к @itereznikov
Download Telegram
Certificate Pinning on iOS in Practice

Статья про то, что такое certificate pining и как его настроить.

⚠️ Основная цель реализации certificate pining — защита от атак типа человек посередине, которые могут позволить злоумышленникам перехватывать данные пользователей и тестировать уязвимости API.

🖥 Certificate pining включает в себя проверку цепочки сертификатов, состоящей из корневого, промежуточного и конечного сертификатов, с акцентом на конечный сертификат для обеспечения безопасности соединения.

ℹ️ Можно пиннить как весь сертификат, так и его отпечаток или открытый ключ, что дает гибкость в управлении сертификатами, особенно при их обновлении.

❗️ Обновление сертификатов может быть неудобным, так как требует обновления приложения. Рекомендуется использовать пиннинг открытого ключа или удаленные обновления сертификатов через такие решения, как CloudKit.

⚙️ Для реализации certificate pining в iOS необходимо использовать URLSessionDelegate для обработки аутентификационных вызовов и проверки доверенных сертификатов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Swift Computed Property: Code Examples

Вдруг вы не знаете, что такое вычисляемое свойство - эта статья для вас 🙂

ℹ️ Вычисляемое свойство в Swift предоставляет геттер и необязательный сеттер для косвенного доступа к другим свойствам и значениям, позволяя создавать новые значения на основе существующих.

Computed properties могут использоваться для создания значений, таких как имя файла, основанное на других свойствах, или для управления доступом к внутренним объектам через публичные интерфейсы.

⚠️ Вычисляемые свойства выполняют свои операции каждый раз при доступе, что может привести к снижению производительности при тяжелых вычислениях. Рекомендуется использовать сохраненные значения, если вычисления статичны.
➡️
Такие свойства не принимают аргументы, поэтому для логики, требующей динамических входных параметров или тяжелых вычислений, лучше использовать методы для повышения читаемости и управления производительностью.

Вычисляемые свойства могут иметь асинхронные геттеры, позволяя использовать await для выполнения операций, таких как валидация данных перед возвратом значения.

struct Content {
enum ContentError: Error {
case emptyFileExtension
}

let name: String
let fileExtension: String

/// A computed property to generate a filename.
/// Throws an error when the file extension is empty.
var filename: String {
get throws(ContentError) {
guard !fileExtension.isEmpty else {
throw .emptyFileExtension
}

return name + "." + fileExtension
}
}
}

/// We now need to use the `try` keyword when accessing:
print(try content.filename) // Prints: "swiftlee-banner.png"
Please open Telegram to view this post
VIEW IN TELEGRAM