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