<filesystem> header 中固有的安全漏洞是什么?

What are the inherent security vulnerabilities in the <filesystem> header?

Google C++ style guide section "Other C++ features" 包含以下内容:

In addition to what's described in the rest of the style guide, the following C++ features may not be used:

  • Compile-time rational numbers (<ratio>), because of concerns that it's tied to a more template-heavy interface style.
  • The <cfenv> and <fenv.h> headers, because many compilers do not support those features reliably.
  • The <filesystem> header, which does not have sufficient support for testing, and suffers from inherent security vulnerabilities.

(强调我的)

我知道 Google C++ 风格指南可能存在一些争议,有些观点我不同意。尽管如此,我很想知道 <filesystem> header 中存在的固有安全漏洞是什么,这指的是在使用其他访问文件系统的方式时不会存在的安全漏洞(例如 OS-specific API 调用)。

只是 <filesystem> 包装了像 rename 而不是 renameat 这样的系统调用,因此不允许在不受 symlink attacks 约束的情况下解析文件名。这当然不会影响所有用例,但这是一个合理的担忧;也许未来的 C++ 版本将包含一个基于描述符的接口。