阻止用户在std :: casteriention ::文件系统中留下目录
Preventing user to leave directory in std::experimental::filesystem
美好的一天,
我正在创建一个接口,该接口允许其他人在某个目录中在我的计算机上创建文件。目前,我是初始化一个工作目录,该目录是允许用户创建文件的唯一目录。
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
上迭代并检查" .."条目,该条目也拒绝了一些无害(但有用的(案例。
相关文章:
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- libstdc++ 文件系统中未初始化的用法?
- boost::文件系统::recursive_directory_iterator多线程安全
- C++17 文件系统::remove_all 带有通配符路径
- 实验性文件系统库不完整C++?
- 使用文件系统时仍然需要链接到带有 C++20 的 stdc++fs?
- 无法链接文件系统库C++
- 无法识别 Mac c++ 文件系统库
- 使用Boost文件系统C++将具有特定扩展名的文件的名称保存在特定文件夹中
- 获取 clang++:错误:在编译文件系统库的代码时
- C++17 文件系统在 Windows 10 上使用 nuwen MinGW
- C++ VS 错误:<实验/文件系统>提供 std::experimental::文件系统的标头已被Microsoft弃用,将被删除
- 如何修复 MinGW 文件系统探针?
- 将 boost::文件系统::p ath 转换为 char?
- 我可以在 ndk 中使用带有 libc++ 的实验性文件系统吗?
- 是否可以使用 std::文件系统获取根名称列表?
- C++ 17 文件系统copy_file访问被拒绝