2017-08-29 8 views
1

Normalerweise würde ich NSTemporaryDirectory verwenden, aber ein Tool, das ich verwende, hat einige strikte Pfadlänge Grenzen, und der Verzeichnispfad von NSTemporaryDirectory zurückgegeben ist zu lang. Ist es in Ordnung, Dinge direkt in /tmp zu setzen, mit NSUUID, um einen Dateinamen zu generieren?Ist es in Ordnung,/tmp auf macOS zu verwenden?

Antwort

2

Hier ist, was die Dokumentation darüber zu sagen haben:

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

„Wenn möglich, vermeiden in einem gemeinsamen Verzeichnis Erstellen von temporären Dateien wie/tmp oder in Verzeichnissen im Besitz des Benutzers Wenn jemand anders Zugriff auf Ihre temporäre Datei hat, kann er seinen Inhalt ändern, seine Eigentümerschaft oder seinen Modus ändern oder ihn durch einen harten oder symbolischen Link ersetzen.Es ist viel sicherer, eine temporäre Datei überhaupt nicht zu verwenden (verwenden Sie ein anderes Formular) der Interprozesskommunikation) oder halten temporäre Dateien in einem von Ihnen erstellten Verzeichnis, auf das nur Ihr Prozess (der als Ihr Benutzer fungiert) Zugriff hat.

Wenn Ihre Datei in einem freigegebenen Verzeichnis sein muss, geben Sie ihr einen eindeutigen (und zufällig generierten) Dateinamen (Sie können dazu die C-Funktion mkstemp verwenden), und schließen und öffnen Sie die Datei nie. Wenn Sie eine solche Datei schließen, kann ein Angreifer sie möglicherweise finden und ersetzen, bevor Sie sie erneut öffnen.

Hier sind einige öffentliche Verzeichnisse, die Sie verwenden können:

...

/tmp

Dieses Verzeichnis für allgemeine gemeinsamen temporären Speicher verwendet wird. Es wird bei jedem Systemstart gelöscht.

...

Für maximale Sicherheit sollten Sie immer nur vorübergehend Verzeichnisse innerhalb dieser Verzeichnisse, stellen entsprechende Berechtigungen für diese Unterverzeichnisse erstellen und dann Dateien in diese Unterordner schreiben.“

So ist es entmutigt, aber wenn Sie keine andere Wahl haben, sieht es aus wie Sie in Ordnung sein, mit einigen Sicherheits Einsprüche

es gibt eine Ausnahme, obwohl, wenn Sie Ihre App Sandbox ist, /tmp nicht zugänglich sein. https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html

+0

Danke, ich denke in meinem Fall (ein Komponententest) sind die Sicherheitsbedenken nicht groß genug, um von Bedeutung zu sein (und, uh, es funktioniert nicht mit dem langen Pfad, also ...). – taway

Verwandte Themen