os.mkfifo()
завершится с ошибкой, за исключением OSError: [Errno 17] File exists
, если файл уже существует, поэтому здесь нет проблем с безопасностью. Проблема безопасности с использованием tempfile.mktemp()
- это условие гонки, при котором злоумышленник может создать файл с таким же именем, прежде чем сам его открыть, но, поскольку os.mkfifo()
не удается, если файл уже существует, это не проблема.
Однако, поскольку mktemp()
устарела, его не следует использовать. Вы можете использовать tempfile.mkdtemp()
вместо:
import os, tempfile
tmpdir = tempfile.mkdtemp()
filename = os.path.join(tmpdir, 'myfifo')
print filename
try:
os.mkfifo(filename)
except OSError, e:
print "Failed to create FIFO: %s" % e
else:
fifo = open(filename, 'w')
# write stuff to fifo
print >> fifo, "hello"
fifo.close()
os.remove(filename)
os.rmdir(tmpdir)
РЕДАКТИРОВАТЬ: Я должен пояснить, что, поскольку уязвимость mktemp()
предотвращается этим, есть еще другие обычные проблемы безопасности, которые необходимо учитывать; например злоумышленник может создать fifo (если у него есть подходящие разрешения) до того, как это сделает ваша программа, что может привести к ее аварийному завершению, если ошибки / исключения не обрабатываются должным образом.