gpt4 book ai didi

c++ - 确保文件是(X 级别)的有效方法?在某个目录下

转载 作者:太空狗 更新时间:2023-10-29 11:45:40 24 4
gpt4 key购买 nike

我需要确保某个文件位于某个目录中(无论有多少层)。

可视化:

A/ + file

A/ + x/x/x/..../file

它必须在 A 下,与多少级别无关。

文件路径(加号后)由用户给程序。

问题是我不能使用 chroot,因为该程序还需要访问 A(比方说 B)之外的一些文件夹,但用户(通过套接字接口(interface)连接)不应该能够通过 A/+ ../B/文件

这将在内部循环中完成,因此它必须表现良好。我想过计算'/',提取'..'的数量,提取'/./'的数量并比较它> = 1但它都表现不佳并且感觉容易出现错误,因为输入是由用户。

是否有我不知道或其他方式检查此功能的函数?

编辑:

如果有一种方法即使在我 chroot 之后也可以授予我对文件夹 B 的访问权限(如果我没记错的话文件句柄在 chroot 之后保留,我需要那个文件夹版本),那也可以.我只需要访问 B,在 chroot 之后在其中创建/读取/写入文件。

编辑2:

顺便说一句,我知道一种使用 UID 等方法来做到这一点,但我需要一个替代方法。

最佳答案

我认为最简单的方法是将用户提供的路径字符串附加到 A 目录路径的末尾,然后使用 POSIX realpath()函数来简化生成的路径字符串。 (realpath() 将消除任何“..”或符号链接(symbolic link)恶作剧并为您提供一个简单的绝对文件路径字符串)

然后将该路径与 A 目录的简化/绝对路径进行比较。如果文件路径字符串以 A 的路径字符串开头(例如 strncmp(file_path_str, a_dir_path_str, strlen(a_dir_path_str))==0),则允许访问该文件;否则拒绝访问。

关于c++ - 确保文件是(X 级别)的有效方法?在某个目录下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com