安全注意事项

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

不幸的是,实际上不可能将 Pygments 本身硬化以防止这些问题:一些正则表达式会导致“灾难性回溯”,但其他错误(如不正确的匹配器)也会导致类似的问题,并且无法以自动化的方式找到它们(除非解决停机问题)。Pygments 有广泛的单元测试、自动化的随机测试,并且也由 OSS-Fuzz 测试,但我们永远无法消除这方面的所有错误。

我们的建议是

  • 确保 Pygments 进程在合理的时间内终止。通常情况下,Pygments 应该在几秒钟内完成对合理大小的输入的处理。

  • 限制并发 Pygments 进程的数量,以避免资源过度使用。

Pygments 作者将高度重视任何导致长时间处理时间的错误 - 这将是在补丁版本中修复的问题之一。当报告您怀疑存在超线性执行时间的错误时,请确保附上用于重现该错误的输入。