安全的跨平台功能,以获得规范化的路径

时间:2011-08-20 01:56:43

标签: c security normalization relative-path

我想要一个将相对路径转换为绝对路径的标准函数,如果可能的话,我想尽可能使它成为跨平台(所以我想避免调用外部库函数) 。这样做是为了防止路径攻击。

我知道这样的函数无法检测到符号链接,但我对我的应用程序没有问题。

我可以滚动自己的代码,但可能存在一些问题,例如:平台如何处理“../”模式的编码或变体。

是否已经实施了类似的东西?

2 个答案:

答案 0 :(得分:9)

由于C或C ++标准库中没有这样的功能,因此没有一个通用函数可以调用。在Windows上,您可以使用GetFullPathName。在Linux,Mac OS X和其他基于Unix的系统上,您可以使用realpath(3)功能,作为奖励也可以解决沿途的符号链接。

注意:任何解决方案都只能在单线程程序中可靠。如果您正在使用多个线程,则另一个线程可能会出现并意外地从您下方更改工作目录,从而更改路径名解析。

答案 1 :(得分:1)

我认为你最接近平台独立性的是POSIX libraries。特别是你想看看unistd.h,遗憾的是我不相信它有一个'标准化'的路径概念。如果我没记错的话,标准本身甚至不太了解目录而不是相对的目录。

为了变得更好,我认为你需要推出自己的道路好东西。