filecontents 可以将外部文件写入父目录中吗?

filecontents 可以将外部文件写入父目录中吗?

阅读TeX 图灵完备有什么缺点吗?让我开始思考 .tex 文件隐藏恶意代码的可能性。

filecontents包用于在 LaTeX 文档中写入外部文件。根据我的测试,它可以在现有路径中写入外部文件向下目录树。换句话说,它可以在输入 .tex 文件所在的目录中或其任何子目录中创建一个文件。例如,以下代码按预期工作,

\documentclass{article}

\usepackage{filecontents}

\begin{filecontents*}{./myfolder/myfile.txt}
Hello World
\end{filecontents*}

\begin{document}
test
\end{document}

只要

./我的文件夹

是有效路径(即“myfolder”子目录已经存在):

正在写入外部文件向上目录树可能吗?

到目前为止,我的所有尝试都无功而返。我猜这是不可能的;否则,这将代表一种潜在的非常恶意的漏洞,甚至不需要--shell-escape;早在我问自己这个问题之前,恶意的人就会利用这种漏洞,而 LaTeX 也会因此而臭名昭著。

那么,写入外部文件向上目录树是否可行?如果答案是可以,您该怎么做?如果答案是否定的,究竟是什么原因禁止这样做?

答案1

这取决于你的偏执程度。

我的 texmf.cnf(默认 texlive 2012)说

% Allow TeX \openin, \openout, or \input on filenames starting with `.'
% (e.g., .rhosts) or outside the current tree (e.g., /etc/passwd)?
% a (any)        : any file can be opened.
% r (restricted) : disallow opening "dotfiles".
% p (paranoid)   : as `r' and disallow going to parent directories, and
%                  restrict absolute paths to be under $TEXMFOUTPUT.
openout_any = p
openin_any = a

相关内容