阻止用户在std :: experimental :: filesystem中保留目录

时间:2018-04-27 08:54:25

标签: c++ filesystems

美好的一天,

我正在创建一个界面,允许其他人在我的机器上创建某个目录中的文件。 现在我正在初始化一个工作目录,这是允许用户创建文件的唯一目录。

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

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

file_name = work_path / file_name;

可悲的是,这允许人们使用像" ../ Documents /"这样的路径。访问目录,他们不应该'有权访问。

有没有更聪明的方法来检查路径是否位于目录之外?

提前谢谢

1 个答案:

答案 0 :(得分:0)

首先,检查要追加的path是否有root path;在Windows上,这是一个比is_relative更强的声明。

显而易见的C ++ 17答案是应用lexically_normal并检查结果是否以“..”开头。对于TS版本,您仍然可以iterate超过path并检查“..”条目,这也会拒绝一些无害(但有用的)案例。