Erstellen Sie eine Datei nur dann sicher, wenn sie in Python nicht vorhanden ist
Ich möchte in eine Datei schreiben, basierend darauf, ob diese Datei bereits vorhanden ist oder nicht, und nur schreiben, wenn sie noch nicht vorhanden ist (in der Praxis möchte ich weiterhin Dateien versuchen, bis ich eine Datei finde, die nicht vorhanden ist).
Der folgende Code zeigt, wie ein potenzieller Angreifer einen Symlink einfügen kann, wie in empfohlendieser Beitrag dazwischen ein Test für die Datei und die Datei, die geschrieben wird. Wenn der Code mit ausreichend hohen Berechtigungen ausgeführt wird, kann dies dazu führen, dass eine beliebige Datei überschrieben wird.
Gibt es eine Möglichkeit, dieses Problem zu lösen?
import os
import errno
file_to_be_attacked = 'important_file'
with open(file_to_be_attacked, 'w') as f:
f.write('Some important content!\n')
test_file = 'testfile'
try:
with open(test_file) as f: pass
except IOError, e:
# symlink created here
os.symlink(file_to_be_attacked, test_file)
if e.errno != errno.ENOENT:
raise
else:
with open(test_file, 'w') as f:
f.write('Hello, kthxbye!\n')