Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

Mengamankan Data IOS pada Rest: Melindungi Data Pengguna

by
Length:LongLanguages:
This post is part of a series called Securing iOS Data at Rest.
Securing iOS Data at Rest: The Keychain

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Ini adalah yang pertama dari tiga artikel tentang mengamankan data pengguna pada rest. Di posting ini, kita akan memulai dengan dasar-dasar melindungi data di iOS sehingga Anda dapat mempelajari praktik terbaik saat ini untuk menyimpan data dengan aman bersama Swift.

Aplikasi apa pun yang menyimpan data pengguna harus menjaga keamanan dan privasi data tersebut. Seperti yang telah kita lihat dengan pelanggaran data terakhir, ada kemungkinan konsekuensi serius karena gagal melindungi data pengguna Anda yang tersimpan. Dalam tutorial ini, Anda akan mempelajari beberapa praktik terbaik untuk melindungi data pengguna Anda.

Perizinan

Sebelum kita menyimpan data kustom Anda, mari kita lihat data yang dapat dibagi oleh aplikasi sistem.

Untuk banyak versi iOS, telah diminta untuk meminta izin aplikasi untuk menggunakan dan menyimpan beberapa data pribadi pengguna yang berada di luar aplikasi, seperti saat menyimpan dan memuat gambar ke perpustakaan foto. Mulai di iOS 10, API yang mengakses data pribadi pengguna mengharuskan Anda menyatakan akses sebelumnya dari file info.plist proyek Anda.

Ada banyak kerangka kerja yang dapat mengakses data di luar aplikasi Anda, dan setiap kerangka memiliki kunci privasi yang sesuai.

  • Berbagi Bluetooth: NSBluetoothPeripheralUsageDescription
  • Kalender: NSCalendarsUsageDescription
  • CallKit: NSVoIPUsageDescription
  • Kamera: NSCameraUsageDescription
  • Kontak: NSContactsUsageDescription
  • Kesehatan: NSHealthShareUsageDescription, NSHealthUpdateUsageDescription
  • HomeKit: NSHomeKitUsageDescription
  • Lokasi: NSLocationAlwaysUsageDescription, NSLocationUsageDescription, NSLocationWhenInUseUsageDescription
  • Perpustakaan Media: NSAppleMusicUsageDescription
  • Mikrofon: NSMicrophoneUsageDescription
  • Pergerakan: NSMotionUsageDescription
  • Foto: NSPhotoLibraryUsageDescription
  • Pengingat: NSRemindersUsageDescription
  • Pengenalan Suara: NSSpeechRecognitionUsageDescription
  • SiriKit: NSSiriUsageDescription
  • Penyedia TV: NSVideoSubscriberAccountUsageDescription

Sebagai contoh, di sini adalah entri dalam info.plist untuk memungkinkan aplikasi Anda memuat dan menyimpan nilai ke kalender.

Jika deskripsi penggunaan hilang saat API mencoba mengakses data, aplikasi hanya akan mogok.

API Data Protection

Untuk data pengguna apa pun yang ada di dalam aplikasi, hal pertama yang harus dipikirkan adalah apakah Anda perlu menyimpan informasi tersebut, dan data apa yang penting bagi aplikasi. Simpan sebanyak data penting dalam memori kerja, bukan di penyimpanan file. Hal ini sangat penting untuk informasi identitas pribadi.

Tapi, jika Anda harus menyimpan data, ada baiknya mengaktifkan Data Protection dari Apple.

Data Protection mengenkripsi konten dari kontainer aplikasi Anda. Ini bergantung pada pengguna yang memiliki kode akses, dan dengan demikian keamanan enkripsi terkait dengan kekuatan kode akses. Dengan Touch ID dan enkripsi sistem berkas yang ditingkatkan yang diperkenalkan di iOS 10.3, sistem proteksi data memiliki banyak perbaikan. Anda dapat mengaktifkan perlindungan data di aplikasi Anda dengan mengaktifkan Data Protection di bagian Capabilities dari file proyek Anda. Ini memperbarui file profil dan hak penyediaan Anda untuk menyertakan kemampuan Data Protection. Data Protection menawarkan empat tingkat perlindungan, yang digambarkan oleh struktur FileProtectionType:

  • none: tidak ada perlindungan
  • complete: data tidak dapat diakses saat perangkat terkunci. Ini adalah pengaturan yang disarankan untuk sebagian besar aplikasi.
  • completeUnlessOpen: data dapat diakses saat perangkat tidak terkunci, dan terus dapat diakses sampai file ditutup, meskipun pengguna mengunci perangkat. File juga dapat dibuat saat perangkat terkunci. Pilihan ini bagus saat Anda perlu membuka file untuk diproses dan proses berlanjut bahkan jika pengguna meletakkan aplikasi ke latar belakang dan mengunci perangkat. Contohnya mungkin pekerjaan yang mengunggah file ke server.
  • completeUntilFirstUserAuthentication: saat perangkat di-boot, file tidak dapat diakses sampai pengguna pertama kali membuka perangkat. Setelah itu, file tersedia bahkan saat perangkat terkunci lagi. Pilihan ini bagus untuk file yang perlu diakses beberapa saat kemudian di latar belakang saat perangkat terkunci, seperti saat mengambil pekerjaan latar belakang.

complete adalah tingkat default. Untuk membantu menghindari kerusakan saat kode Anda mencoba mengakses data yang terkunci, Anda dapat mendaftar untuk notifikasi melalui UIApplicationProtectedDataDidBecomeAvailable dan UIApplicationProtectedDataWillBecomeUnavailable untuk mengetahui kapan data tersedia.

Selain itu, Anda juga dapat memeriksa flag UIApplication.shared.isProtectedDataAvailable.

Satu hal penting yang perlu diingat saat mengaktifkan perlindungan data adalah jika Anda menggunakan layanan latar belakang seperti pengambilan latar belakang, kode tersebut mungkin memerlukan akses ke data Anda di latar belakang saat perangkat terkunci. Untuk file tersebut, Anda perlu menetapkan tingkat perlindungan untuk completeUntilFirstUserAuthentication. Anda dapat mengontrol tingkat perlindungan masing-masing file secara terpisah saat membuat file dan direktori menggunakan kelas FileManager.

Anda juga dapat mengatur tingkat perlindungan saat menulis ke file. Objek Data memiliki metode yang dapat menulis datanya ke file, dan Anda dapat mengatur tingkat perlindungan saat Anda memanggil metode ini.

Anda juga dapat mengatur tingkat perlindungan saat menyiapkan model Core Data Anda.

Untuk mengubah tingkat proteksi dari file yang ada, gunakan yang berikut ini:

Integritas Data

Bagian dari melindungi data Anda yang tersimpan termasuk memeriksa integritasnya. Praktik yang bagus untuk tidak mempercayai data yang Anda muat dari penyimpanan; itu mungkin secara tidak sengaja atau dengan jahat diubah. Protokol NSSecureCoding dapat digunakan untuk memuat dan menyimpan objek data dari penyimpanan dengan aman. Ini akan memastikan objek yang Anda muat berisi data yang diharapkan. Jika Anda akan menyimpan objek Anda sendiri, Anda dapat menyesuaikan diri dengan protokol pengkodean aman di dalam kelas Anda.

Kelas harus diwariskan dari NSObject. Kemudian, untuk mengaktifkan pengkodean aman, timpa metode protokol supportSecureCoding.

Jika objek kustom Anda di deserialisasi dengan init?(coder aDecoder: NSCoder), metode decodeObject(forKey:) harus diganti dengan decodeObject(of:forKey:), yang memastikan bahwa jenis objek yang benar dibongkar dari penyimpanan.

Jika Anda menggunakan NSKeyedUnarchiver untuk memuat data dari penyimpanan, pastikan untuk mengatur properti requireSecureCoding-nya.

Mengaktifkan pengkodean aman untuk operasi penyimpanan Anda akan mencegah Anda untuk secara tidak sengaja mengarsipkan objek yang tidak mematuhi protokol pengkodean aman.

Selain NSSecureCoding, selalu bagus untuk menerapkan cek validasi data Anda sendiri saat membongkar arsip atau menerima masukan apapun secara umum.

Jalur Data

Seiring iOS terus berkembang, selalu ada fitur baru yang berpotensi membocorkan data yang tersimpan. Mulai dari iOS 9, konten Anda dapat diindeks dalam pencarian Spotlight, dan di iOS 10 Anda dapat mengekspos konten Anda ke Widget seperti Today Widget yang muncul di layar kunci. Hati-hati jika Anda ingin mengekspos konten Anda dengan fitur baru ini. Anda mungkin akan berbagi lebih dari yang Anda rencanakan!

iOS 10 juga menambahkan fitur Handoff baru dimana data pasteboard yang disalin secara otomatis dibagi antar perangkat. Sekali lagi, berhati-hatilah untuk tidak mengungkapkan data sensitif apa pun di pasteboard ke Handoff. Anda bisa melakukan ini dengan menandai konten sensitif sebagai localOnly. Anda juga dapat menetapkan tanggal dan waktu kadaluwarsa untuk data.

File yang disimpan ke penyimpanan perangkat dapat dicadangkan secara otomatis, baik di iTunes atau di iCloud. Meskipun pencadangan dapat dienkripsi, ada baiknya Anda mengecualikan file sensitif apa pun yang bahkan tidak perlu keluar dari perangkat. Hal ini dapat dilakukan dengan mengatur flag isExcludedFromBackup pada file.

Animasi yang terjadi saat meletakkan aplikasi ke latar belakang dicapai oleh iOS yang mengambil tangkapan layar aplikasi Anda yang kemudian digunakan untuk animasi. Saat Anda melihat daftar aplikasi terbuka di app switcher, tangkapan layar ini juga digunakan di sana. Tangkapan layar akan tersimpan pada perangkat.

Sebaiknya sembunyikan tampilan yang mengungkapkan data sensitif sehingga data tidak tertangkap dalam tangkapan layar. Untuk melakukan ini, atur notifikasi saat aplikasi berada di latar belakang dan tetapkan properti hidden untuk elemen UI yang ingin Anda kecualikan. Mereka akan disembunyikan sebelum iOS menangkap layar. Kemudian saat masuk ke latar depan, Anda bisa menampilkan elemen UI-nya.

Hapus notifikasi Anda saat tampilannya menghilang.

Aplikasi Anda juga memiliki cache keyboard untuk bidang teks yang mengaktifkan koreksi otomatis. Teks yang diketik pengguna, bersama dengan kata-kata yang baru dipelajari, disimpan di cache sehingga memungkinkan untuk mengambil kembali berbagai kata yang telah dimasukkan pengguna sebelumnya dalam aplikasi Anda. Satu-satunya cara untuk menonaktifkan cache keyboard adalah dengan mematikan opsi koreksi otomatis.

Anda harus menandai bidang kata sandi sebagai entri teks yang aman. Bidang teks yang aman tidak menampilkan kata sandi atau menggunakan cache keyboard.

Log debug disimpan ke file dan dapat diambil untuk pembangunan produksi aplikasi Anda. Bahkan saat Anda mengkodekan dan debugging aplikasi Anda, pastikan untuk tidak memasukkan informasi sensitif seperti kata sandi dan kunci ke konsol. Anda mungkin lupa menghapus informasi itu dari log sebelum mengirimkan kode Anda ke app store! Saat melakukan debugging, lebih aman daripada menggunakan breakpoint untuk melihat variabel yang sensitif.

Koneksi jaringan juga bisa di-cache ke penyimpanan. Informasi lebih lanjut tentang menghapus dan menonaktifkan cache jaringan dapat ditemukan di artikel Mengamankan Komunikasi di iOS.

Menghancurkan Data

Anda mungkin sudah tahu bahwa ketika sebuah file di komputer dihapus, seringkali file itu sendiri tidak dihapus; hanya referensi untuk file yang akan dihapus. Untuk benar-benar menghapus file tersebut, Anda bisa menimpa file tersebut dengan data acak sebelum menyingkirkannya.

Peralihan ke solid state drive telah membuat sulit untuk menjamin data telah dihancurkan, dan cara terbaik untuk menghapus data dengan aman terbuka untuk diperdebatkan. Namun, tutorial ini tidak akan lengkap tanpa contoh cara menghapus data dari penyimpanan. Karena beberapa perdebatan tentang pengoptimasi Swift, dan karena kami berharap dapat menjamin bahwa setiap byte file tersebut sebenarnya ditimpa, kami menerapkan fungsi ini di C.

Implementasi di bawah ini bisa masuk ke dalam file .c. Anda perlu menambahkan definisi fungsi atau file yang berisi fungsi ke dalam header penjembatan Anda agar bisa menggunakan fungsi dari Swift.  Anda mungkin kemudian ingin memanggil fungsi ini tepat sebelum tempat di mana Anda menggunakan metode removeFile dari FileManager. Mungkin Anda mungkin ingin menerapkan praktik terbaik yang dijelaskan dalam tutorial ini dan yang akan datang pada pembaruan aplikasi. Anda kemudian dapat menghapus data yang sebelumnya tidak dilindungi selama migrasi.

Kesimpulan

Pada artikel ini, Anda telah belajar tentang menyetel perizinan untuk data yang dapat diakses aplikasi Anda, serta bagaimana memastikan perlindungan dan integritas file dasar. Kita juga melihat beberapa cara agar data pengguna dapat dibocorkan secara tidak sengaja dari aplikasi Anda. Pengguna Anda menaruh kepercayaan mereka pada Anda untuk melindungi datanya. Mengikuti praktik terbaik ini akan membantu Anda mengembalikan keyakinan itu.

Sementara Anda berada di sini, lihat beberapa posting kami yang lain mengenai pengembangan aplikasi iOS!


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.