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