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