安全注意事项

Pygments不能保证执行时间,在使用Pygments处理任意用户输入时需要考虑这一点。例如,如果您有一个使用Pygments进行高亮显示的Web服务,则可能有一些输入将导致Pygments进程“永远”运行和/或使用大量内存。如果进程没有快速终止,这随后可用于在服务器上执行远程拒绝服务攻击。

不幸的是,针对这些问题强化Pygments本身几乎是不可能的:一些正则表达式可能导致“灾难性的回溯”,但其他错误,如不正确的匹配器也可能导致类似的问题,并且没有办法以自动的方式找到它们(除非解决停顿问题)。Pygments拥有广泛的单元测试、自动化的随机测试,并且还通过 OSS-Fuzz ,但我们永远无法消除这一领域的所有细菌。

我们的建议是:

  • 确保皮吉特斯流程是 terminated 在相当短的暂停之后。一般来说,适当大小的输入最多只需几秒钟。

  • Limit 用于避免资源超额订阅的并发Pygments进程数。

Pygments的作者将以高优先级处理任何导致处理时间较长的错误--这是将在补丁发布中修复的事情之一。在报告您怀疑超线性执行时间的错误时,请确保附加输入以重现它。