2017-08-29 63 views
1

通常我會使用NSTemporaryDirectory,但是,我正在使用的工具有一些嚴格的路徑長度限制,並且由NSTemporaryDirectory返回的目錄路徑太長。是否可以直接在/tmp中使用NSUUID生成文件名?可以在macOS上使用/ tmp嗎?

回答

2

下面介紹一下文檔不得不說一下吧:

https://developer.apple.com/library/content/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html

「如果可能的話,避免創建共享目錄的臨時文件,如/ tmp,或由用戶擁有的目錄。如果其他人有權訪問您的臨時文件,他們可以修改其內容,更改其所有權或模式,或者用硬鏈接或符號鏈接替換它。根本不使用臨時文件更安全(使用其他表單進程間通信)或將臨時文件保存在您創建的目錄中,並且只有您的進程(充當您的用戶)纔有權訪問。

如果您的文件必須位於共享目錄中,請爲其指定一個唯一(隨機生成的)文件名(您可以使用C函數mkstemp來執行此操作),並且永不關閉並重新打開文件。如果關閉這樣的文件,攻擊者可能會發現它並在重新打開之前將其替換。

這裏有一些公共目錄,您可以使用:

...

/tmp目錄

這個目錄是用於一般共享的臨時存儲。每次系統啓動時它都被清除。

...

爲了獲得最大的安全性,你應該總是在這些子目錄中創建這些目錄內的臨時子目錄,設置相應的權限,然後將文件寫入這些子目錄。」

所以,它氣餒,但如果你沒有其他選擇,那樣子你會好起來的,具有一定的安全注意事項

有一個例外,不過,如果你的應用沙盒,/tmp將無法​​訪問:https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html

+0

謝謝,我認爲在我的情況下(單元測試)安全問題並不是一個足夠重要的事情(並且,呃,它不適用於漫長的道路,所以......)。 – taway

相關問題