Безопасно создайте файл, если и только если он не существует с python
Я хочу записать в файл, основываясь на том, существует ли этот файл или нет, только запись, если он еще не существует (на практике я хочу продолжать пробовать файлы, пока не найду тот, который не существует).
В следующем коде показан способ, которым потенциальный злоумышленник может вставить символическую ссылку, как предлагается вэта почта между проверкой файла и записываемого файла. Если код запускается с достаточно высокими разрешениями, это может перезаписать произвольный файл.
Есть ли способ решить эту проблему?
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')