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