安全性:Latex 注射黑客

安全性:Latex 注射黑客

我正在构建一个 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 的任何合理环境都应该具有限制该过程可用时间或其他资源的功能,并在超出这些限制时中止该过程。

相关内容