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')

Antworten auf die Frage(2)

Ihre Antwort auf die Frage