我正在构建一个 Web 应用程序,它从用户那里获取 Latex 代码,然后在服务器端进行编译。现在 Latex 造成了巨大的系统漏洞,因为它是图灵完备的,你基本上可以通过使用 \openin、\read、\readline 或 \write 等命令来破解整个系统。
我读过带有安全标签的文章,但还不确定如何才能让系统完全安全。例如,它说更改文件texmf.cnf
。但在其中一条评论中它说:
请注意,恶意循环可能会无限期地导致 CPU 峰值。(戴夫·贾维斯)
对此没有提出解决方案。对此可以做些什么?但我的具体问题是:
在编译用户 latex 时,需要采取哪些措施来确保我的网页安全?
答案1
默认情况下,latex 不能执行系统代码或写入文件开头.
或写出当前目录,因此安全风险很小。
如果您希望进一步限制文件读取paranoid
,则默认设置texmf.cnf
是
% 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
对于任何非平凡的编程语言来说,都存在无限循环的可能性
\def\x{\x}\x
将永远循环。
在 TeX 内部没有办法阻止这种情况,但是在您的服务器上启动 TeX 的任何合理环境都应该具有限制该过程可用时间或其他资源的功能,并在超出这些限制时中止该过程。