我有一个目录名和一个子路径,例如"./files"
和"/example.txt"
. 虽然目录可以任意放置在文件系统中,但我需要确保目录+子路径 ( "./files/example.txt"
) 实际上在给定目录中。所以这个例子是有效的,而子路径"/../example.txt"
是无效的,因为它既不是目录的子目录,也不是孙子目录等。允许在目录之外的软链接。
我应该如何在 C 中执行此测试?
- 我的第一个猜测是使用
realpath(directory_subpath)
结果的开头并将其与 进行比较realpath(directory)
,但在阅读了有关问题的信息后,PATH_MAX
我对此有点不确定,这也可能导致软链接出现问题。 - 我的第二个想法是简单地检查子路径是否以开头,
/../
如果是,导致无效。如果/../
存在于子路径中的任何其他位置,则将删除之前的目录名称(从左到右,重复此操作直到路径无效或到达路径名称的末尾)。
可能是出于subpath
恶意,所以我想对此非常非常确定。我的第二种方法安全吗?有不同的更好的方法吗?