Apple khuyến cáo không nên dựa vào phương thức fileExistAtPath :. Sẽ tốt hơn nếu chỉ cố gắng mở một tệp và xử lý lỗi nếu tệp không tồn tại.
Tham khảo lớp NSFileManager
Lưu ý: Không nên cố gắng dự đoán hành vi dựa trên trạng thái hiện tại của hệ thống tệp hoặc một tệp cụ thể trên hệ thống tệp. Làm như vậy có thể gây ra hành vi kỳ lạ hoặc điều kiện chủng tộc. Tốt hơn hết là thử một thao tác (chẳng hạn như tải tệp hoặc tạo thư mục), kiểm tra lỗi và xử lý các lỗi đó một cách duyên dáng hơn là cố gắng tìm hiểu trước liệu hoạt động đó có thành công hay không. Để biết thêm thông tin về các điều kiện chạy đua của hệ thống tệp, hãy xem Điều kiện cuộc đua và các hoạt động tệp an toàn trong Hướng dẫn mã hóa bảo mật.
Từ hướng dẫn mã hóa an toàn.
Để ngăn chặn điều này, các chương trình thường kiểm tra để đảm bảo một tệp tạm thời có tên cụ thể chưa tồn tại trong thư mục đích. Nếu một tệp như vậy tồn tại, ứng dụng sẽ xóa nó hoặc chọn một tên mới cho tệp tạm thời để tránh xung đột. Nếu tệp không tồn tại, ứng dụng sẽ mở tệp để ghi, vì thói quen hệ thống mở tệp để ghi tự động tạo tệp mới nếu không tồn tại. Kẻ tấn công, bằng cách liên tục chạy một chương trình tạo tệp tạm thời mới với tên thích hợp, có thể (với một chút kiên trì và may mắn) tạo tệp trong khoảng cách giữa khi ứng dụng được kiểm tra để đảm bảo tệp tạm thời không tồn tại và khi nó mở ra để viết. Sau đó, ứng dụng sẽ mở tệp kẻ tấn công và ghi vào nó (hãy nhớ rằng, thói quen hệ thống sẽ mở một tệp hiện có nếu có, và chỉ tạo một tệp mới nếu không có tệp hiện có). Tệp kẻ tấn công có thể có quyền truy cập khác với tệp tạm thời của ứng dụng, do đó kẻ tấn công có thể đọc nội dung. Ngoài ra, kẻ tấn công có thể đã mở tệp. Kẻ tấn công có thể thay thế tệp bằng một liên kết cứng hoặc liên kết tượng trưng cho một số tệp khác (thuộc sở hữu của kẻ tấn công hoặc tệp hệ thống hiện có). Ví dụ, kẻ tấn công có thể thay thế tệp bằng một liên kết tượng trưng đến tệp mật khẩu hệ thống, để sau khi tấn công, mật khẩu hệ thống đã bị hỏng đến mức không ai, kể cả quản trị viên hệ thống, có thể đăng nhập. Ngoài ra, kẻ tấn công có thể đã mở tệp. Kẻ tấn công có thể thay thế tệp bằng một liên kết cứng hoặc liên kết tượng trưng cho một số tệp khác (thuộc sở hữu của kẻ tấn công hoặc tệp hệ thống hiện có). Ví dụ, kẻ tấn công có thể thay thế tệp bằng một liên kết tượng trưng đến tệp mật khẩu hệ thống, để sau khi tấn công, mật khẩu hệ thống đã bị hỏng đến mức không ai, kể cả quản trị viên hệ thống, có thể đăng nhập. Ngoài ra, kẻ tấn công có thể đã mở tệp. Kẻ tấn công có thể thay thế tệp bằng một liên kết cứng hoặc liên kết tượng trưng cho một số tệp khác (thuộc sở hữu của kẻ tấn công hoặc tệp hệ thống hiện có). Ví dụ, kẻ tấn công có thể thay thế tệp bằng một liên kết tượng trưng đến tệp mật khẩu hệ thống, để sau khi tấn công, mật khẩu hệ thống đã bị hỏng đến mức không ai, kể cả quản trị viên hệ thống, có thể đăng nhập.