1

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

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

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

可能是出于subpath恶意,所以我想对此非常非常确定。我的第二种方法安全吗?有不同的更好的方法吗?

4

1 回答 1

1

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

我只是禁止..在子路径中:..真正必要且不是恶意的情况很少见。

于 2013-05-24T21:08:17.457 回答