Apple, fileExistAtPath: yöntemine güvenmemenizi önerir. Genellikle bir dosyayı açmaya çalışmak ve dosya yoksa hatayla uğraşmak daha iyidir.
NSFileManager Sınıfı Başvurusu
Not: Davranışı dosya sisteminin veya dosya sistemindeki belirli bir dosyanın durumuna göre yüklemeye çalışmak önerilmez. Bunu yapmak garip davranışlara veya yarış koşullarına neden olabilir. Bir işlemi denemek (dosya yüklemek veya dizin oluşturmak gibi), hataları kontrol etmek ve bu hataları işlemin başarılı olup olmayacağını önceden anlamaya çalışmaktan daha zarif bir şekilde işlemek çok daha iyidir. Dosya sistemi yarış koşulları hakkında daha fazla bilgi için, Güvenli Kodlama Kılavuzu'ndaki "Yarış Koşulları ve Güvenli Dosya İşlemleri" konusuna bakın.
Kaynak: Apple Developer API Başvurusu
Güvenli kodlama kılavuzundan.
Bunu önlemek için, programlar genellikle belirli bir ada sahip geçici bir dosyanın hedef dizinde bulunmadığından emin olur. Böyle bir dosya varsa, uygulama dosyayı siler veya çakışmayı önlemek için geçici dosya için yeni bir ad seçer. Dosya yoksa, uygulama dosyayı yazmak için açar, çünkü dosyayı yazmak için açan sistem yordamı, yoksa otomatik olarak yeni bir dosya oluşturur. Saldırgan, sürekli olarak uygun ada sahip yeni bir geçici dosya oluşturan bir program çalıştırarak (biraz kalıcılık ve biraz da şansla), uygulamanın geçici dosyanın bulunmadığından emin olmak için aradaki boşlukta dosyayı oluşturabilir ve yazmak için açtığında. Uygulama daha sonra saldırganın dosyasını açar ve üzerine yazar (unutmayın, sistem rutini varsa bir dosyayı açar, ve yalnızca mevcut bir dosya yoksa yeni bir dosya oluşturur). Saldırganın dosyası, uygulamanın geçici dosyasından farklı erişim izinlerine sahip olabilir, böylece saldırgan içeriği okuyabilir. Alternatif olarak, saldırganın dosyayı zaten açmış olabilir. Saldırgan dosyayı sabit bir bağlantıyla veya başka bir dosyaya (saldırganın sahip olduğu veya varolan bir sistem dosyasına ait) sembolik bir bağlantıyla değiştirebilir. Örneğin, saldırgan dosyayı sistem parolası dosyasına sembolik bir bağlantıyla değiştirebilir, böylece saldırıdan sonra sistem parolaları, sistem yöneticisi dahil hiç kimsenin oturum açamayacağı noktaya kadar bozulmuştur. Alternatif olarak, saldırganın dosyayı zaten açmış olabilir. Saldırgan dosyayı sabit bir bağlantıyla veya başka bir dosyaya (saldırganın sahip olduğu veya varolan bir sistem dosyasına ait) sembolik bir bağlantıyla değiştirebilir. Örneğin, saldırgan dosyayı sistem parolası dosyasına sembolik bir bağlantıyla değiştirebilir, böylece saldırıdan sonra sistem parolaları, sistem yöneticisi dahil hiç kimsenin oturum açamayacağı noktaya kadar bozulmuştur. Alternatif olarak, saldırganın dosyayı zaten açmış olabilir. Saldırgan dosyayı sabit bir bağlantıyla veya başka bir dosyaya (saldırganın sahip olduğu veya varolan bir sistem dosyasına ait) sembolik bir bağlantıyla değiştirebilir. Örneğin, saldırgan dosyayı sistem parolası dosyasına sembolik bir bağlantıyla değiştirebilir, böylece saldırıdan sonra sistem parolaları, sistem yöneticisi dahil hiç kimsenin oturum açamayacağı noktaya kadar bozulmuştur.