Apple merekomendasikan untuk tidak mengandalkan metode fileExistAtPath :. Sering kali lebih baik hanya mencoba membuka file dan mengatasi kesalahan jika file tersebut tidak ada.
Referensi Kelas NSFileManager
Catatan: Mencoba untuk memprediksikan perilaku berdasarkan pada kondisi saat ini dari sistem file atau file tertentu pada sistem file tidak dianjurkan. Hal itu dapat menyebabkan perilaku aneh atau kondisi ras. Jauh lebih baik untuk mencoba operasi (seperti memuat file atau membuat direktori), memeriksa kesalahan, dan menangani kesalahan itu dengan anggun daripada mencoba mencari tahu sebelumnya apakah operasi akan berhasil. Untuk informasi lebih lanjut tentang kondisi perlombaan sistem file, lihat “Ketentuan Ras dan Operasi File Aman” di Panduan Pengodean Aman.
Dari panduan pengodean aman.
Untuk mencegah hal ini, program sering memeriksa untuk memastikan file sementara dengan nama tertentu belum ada di direktori target. Jika ada file seperti itu, aplikasi akan menghapusnya atau memilih nama baru untuk file sementara untuk menghindari konflik. Jika file tidak ada, aplikasi membuka file untuk ditulis, karena sistem rutin yang membuka file untuk menulis secara otomatis membuat file baru jika tidak ada. Seorang penyerang, dengan terus menjalankan program yang membuat file sementara baru dengan nama yang sesuai, dapat (dengan sedikit kegigihan dan sedikit keberuntungan) membuat file di celah antara saat aplikasi memeriksa untuk memastikan file sementara tidak ada dan ketika dibuka untuk menulis. Aplikasi kemudian membuka file penyerang dan menulis ke sana (ingat, sistem rutin membuka file yang ada jika ada, dan membuat file baru hanya jika tidak ada file yang ada). File penyerang mungkin memiliki izin akses yang berbeda dari file sementara aplikasi, sehingga penyerang dapat membaca isinya. Atau, penyerang mungkin sudah membuka file. Penyerang dapat mengganti file dengan tautan keras atau tautan simbolis ke beberapa file lain (baik milik penyerang atau file sistem yang ada). Misalnya, penyerang dapat mengganti file dengan tautan simbolis ke file kata sandi sistem, sehingga setelah serangan, kata sandi sistem telah rusak hingga tidak ada seorang pun, termasuk administrator sistem, yang dapat login. Atau, penyerang mungkin sudah membuka file. Penyerang dapat mengganti file dengan tautan keras atau tautan simbolis ke beberapa file lain (baik milik penyerang atau file sistem yang ada). Misalnya, penyerang dapat mengganti file dengan tautan simbolis ke file kata sandi sistem, sehingga setelah serangan, kata sandi sistem telah rusak hingga tidak ada seorang pun, termasuk administrator sistem, yang dapat login. Atau, penyerang mungkin sudah membuka file. Penyerang dapat mengganti file dengan tautan keras atau tautan simbolis ke beberapa file lain (baik milik penyerang atau file sistem yang ada). Misalnya, penyerang dapat mengganti file dengan tautan simbolis ke file kata sandi sistem, sehingga setelah serangan, kata sandi sistem telah rusak hingga tidak ada seorang pun, termasuk administrator sistem, yang dapat login.