<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++ 版本将包含一个基于描述符的接口。
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++ 版本将包含一个基于描述符的接口。