Apple recommande de ne pas compter sur la fileExistAtPath: la méthode. Il est souvent préférable de simplement essayer d'ouvrir un fichier et de traiter avec le message d'erreur si le fichier n'existe pas.
NSFileManager De Référence De Classe
Remarque: vous essayez de prédicat de comportement fondées sur l'état actuel du système de fichiers ou un fichier particulier sur le système de fichiers n'est pas recommandé. Cela peut provoquer un comportement anormal ou des conditions de course. Il est de loin préférable de tenter une opération (telle que le chargement d'un fichier ou créer un répertoire), vérifier les erreurs, et de traiter les erreurs gracieusement que c'est pour essayer de comprendre à l'avance si l'opération va réussir. Pour plus d'informations sur le système de fichiers des conditions de course, voir la section "Conditions de Course et de Sécuriser les Opérations de Fichier" dans le Guide de Codage Sécurisé.
Du sûr le guide de codage.
Pour éviter cela, bien souvent, les programmes assurez-vous un fichier temporaire avec un nom spécifique n'existe pas déjà dans le répertoire cible. Si un tel fichier existe, l'application supprime ou choisit un nouveau nom pour le fichier temporaire pour éviter les conflits. Si le fichier n'existe pas, l'application ouvre le fichier en écriture, parce que le système de routine qui ouvre un fichier en écriture crée automatiquement un nouveau fichier si il n'en existe aucun.
Un attaquant, par la permanence de l'exécution d'un programme qui crée un nouveau fichier temporaire avec un nom approprié, peut (avec un peu de persévérance et un peu de chance) de créer le fichier dans l'écart entre le moment de l'application pour vérifier le fichier temporaire n'existait pas et quand il l'ouvre pour l'écriture. Ensuite, l'application ouvre l'attaquant du fichier et écrit (rappelez-vous, le système de routine ouvre un fichier existant si il y en a un, et crée un nouveau fichier seulement si il n'existe pas de fichier existant).
L'attaquant du fichier peut avoir différentes autorisations d'accès de l'application, les fichiers temporaires, de sorte que l'attaquant peut alors lire le contenu. Sinon, l'attaquant ne peut avoir le fichier déjà ouvert. L'attaquant pourrait remplacer le fichier avec un lien en dur ou lien symbolique vers un autre fichier (qui est détenue par le pirate ou un fichier système existant). Par exemple, l'attaquant pourrait remplacer le fichier avec un lien symbolique vers le système de fichier de mot de passe, de sorte qu'après l'attaque, le système de mots de passe qui ont été endommagés au point que personne, y compris l'administrateur du système peut se connecter.