Apple rät davon ab, sich auf die fileExistAtPath: -Methode zu verlassen. Es ist oft besser, einfach zu versuchen, eine Datei zu öffnen und den Fehler zu beheben, wenn die Datei nicht vorhanden ist.
NSFileManager-Klassenreferenz
Hinweis: Es wird nicht empfohlen, das Verhalten anhand des aktuellen Status des Dateisystems oder einer bestimmten Datei im Dateisystem vorherzusagen. Dies kann zu ungewöhnlichem Verhalten oder Rennbedingungen führen. Es ist weitaus besser, einen Vorgang zu versuchen (z. B. eine Datei zu laden oder ein Verzeichnis zu erstellen), auf Fehler zu prüfen und diese Fehler ordnungsgemäß zu behandeln, als im Voraus herauszufinden, ob der Vorgang erfolgreich sein wird. Weitere Informationen zu den Race-Bedingungen des Dateisystems finden Sie unter „Race-Bedingungen und sichere Dateivorgänge“ im Secure Coding Guide.
Quelle: Apple Developer API-Referenz
Aus der sicheren Codierungsanleitung.
Um dies zu verhindern, überprüfen Programme häufig, ob eine temporäre Datei mit einem bestimmten Namen noch nicht im Zielverzeichnis vorhanden ist. Wenn eine solche Datei vorhanden ist, löscht die Anwendung sie oder wählt einen neuen Namen für die temporäre Datei, um Konflikte zu vermeiden. Wenn die Datei nicht vorhanden ist, öffnet die Anwendung die Datei zum Schreiben, da die Systemroutine, die eine Datei zum Schreiben öffnet, automatisch eine neue Datei erstellt, wenn keine vorhanden ist. Ein Angreifer kann durch kontinuierliches Ausführen eines Programms, das eine neue temporäre Datei mit dem entsprechenden Namen erstellt, (mit ein wenig Beharrlichkeit und etwas Glück) die Datei in der Lücke zwischen der Überprüfung durch die Anwendung erstellen, um sicherzustellen, dass die temporäre Datei nicht vorhanden ist und wenn es zum Schreiben geöffnet wird. Die Anwendung öffnet dann die Datei des Angreifers und schreibt in sie (denken Sie daran, dass die Systemroutine eine vorhandene Datei öffnet, falls vorhanden). und erstellt eine neue Datei nur, wenn keine Datei vorhanden ist). Die Datei des Angreifers verfügt möglicherweise über andere Zugriffsberechtigungen als die temporäre Datei der Anwendung, sodass der Angreifer den Inhalt lesen kann. Alternativ kann der Angreifer die Datei bereits geöffnet haben. Der Angreifer kann die Datei durch einen festen Link oder einen symbolischen Link zu einer anderen Datei ersetzen (entweder einer, die dem Angreifer gehört, oder einer vorhandenen Systemdatei). Beispielsweise könnte der Angreifer die Datei durch einen symbolischen Link zur Systemkennwortdatei ersetzen, sodass die Systemkennwörter nach dem Angriff so stark beschädigt wurden, dass sich niemand, einschließlich des Systemadministrators, anmelden kann. Alternativ kann der Angreifer die Datei bereits geöffnet haben. Der Angreifer kann die Datei durch einen festen Link oder einen symbolischen Link zu einer anderen Datei ersetzen (entweder einer, die dem Angreifer gehört, oder einer vorhandenen Systemdatei). Beispielsweise könnte der Angreifer die Datei durch einen symbolischen Link zur Systemkennwortdatei ersetzen, sodass die Systemkennwörter nach dem Angriff so stark beschädigt wurden, dass sich niemand, einschließlich des Systemadministrators, anmelden kann. Alternativ kann der Angreifer die Datei bereits geöffnet haben. Der Angreifer kann die Datei durch einen festen Link oder einen symbolischen Link zu einer anderen Datei ersetzen (entweder einer, die dem Angreifer gehört, oder einer vorhandenen Systemdatei). Beispielsweise könnte der Angreifer die Datei durch einen symbolischen Link zur Systemkennwortdatei ersetzen, sodass die Systemkennwörter nach dem Angriff so stark beschädigt wurden, dass sich niemand, einschließlich des Systemadministrators, anmelden kann.