美好的一天,
我正在创建一个界面,允许其他人在我的机器上创建某个目录中的文件。 现在我正在初始化一个工作目录,这是允许用户创建文件的唯一目录。
namespace fs = std::experimental::filesystem;
auto working_path = fs::path(getenv("HOME")) / fs::path("work");
我将收到的文件名添加到work_path。
file_name = work_path / file_name;
可悲的是,这允许人们使用像" ../ Documents /"这样的路径。访问目录,他们不应该'有权访问。
有没有更聪明的方法来检查路径是否位于目录之外?
提前谢谢
答案 0 :(得分:0)
首先,检查要追加的path
是否有root path;在Windows上,这是一个比is_relative
更强的声明。
显而易见的C ++ 17答案是应用lexically_normal
并检查结果是否以“..”开头。对于TS版本,您仍然可以iterate超过path
并检查“..”条目,这也会拒绝一些无害(但有用的)案例。