检查文件是否是文件夹的子项

时间:2013-05-24 20:54:11

标签: c directory filenames

我有一个目录名和一个子路径,例如"./files""/example.txt"。虽然目录可以任意放在文件系统中,但我需要确保目录+子路径("./files/example.txt")实际上在给定目录中。所以这个例子是有效的,而子路径"/../example.txt"将是无效的,因为它既不是目录的子节点,也不是孙子节点等。允许在目录之外的软链接。

我应该如何在C中执行此测试?

  • 我的第一个猜测是使用realpath(directory_subpath)并将结果的开头与realpath(directory)进行比较,但在阅读PATH_MAX的问题后,我对此有点不确定,这也可能导致软链接问题。
  • 我的第二个想法是检查子路径是否以/../开头,如果是,则导致无效。如果/../存在于子路径中的任何其他位置,则将删除之前的目录名称(从左到右,重复此操作直到路径变为无效或到达路径名称的末尾)。

subpath可能是出于恶意,因此我希望对此非常非常肯定。我的第二种方法安全吗?有不同的,更好的方式吗?

1 个答案:

答案 0 :(得分:1)

如果检查/..(没有斜杠),第二种方法是安全的。

我只是禁止..在子路径中:..真正需要且非恶意的情况相当罕见。