阻止用户在std :: casteriention ::文件系统中留下目录

Preventing user to leave directory in std::experimental::filesystem

本文关键字:文件系统 casteriention 用户 std      更新时间:2023-10-16

美好的一天,

我正在创建一个接口,该接口允许其他人在某个目录中在我的计算机上创建文件。目前,我是初始化一个工作目录,该目录是允许用户创建文件的唯一目录。

namespace fs = std::experimental::filesystem;
auto working_path = fs::path(getenv("HOME")) / fs::path("work");

我将收到的文件名添加到work_path。

file_name = work_path / file_name;

可悲的是,这允许人们使用" ../documents/"之类的路径来访问他们不应该访问的目录。

是否有一种更聪明的方法来检查该路径是否在目录之外放置?

预先感谢您

首先,检查附加的path是否没有根路径;在Windows上,这比is_relative更强大。

明显的C 17答案是应用lexically_normal并检查结果是否以" .."开头。对于TS版本,您仍然可以在path上迭代并检查" .."条目,该条目也拒绝了一些无害(但有用的(案例。