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

Wan*_*eck 5 c security normalization relative-path

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

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

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

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

Ada*_*eld 9

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

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