我想有一個標準的功能,將相對路徑轉換爲絕對路徑,如果可能我想盡可能跨平臺(所以我' d喜歡避免調用外部庫函數)。這是爲了防止路徑利用。安全的跨平臺功能,以獲得規範化的路徑
我知道這樣的函數將無法檢測到符號鏈接,但對於我的應用程序而言,我可以。
我可以推出自己的代碼,但可能會有一些問題,例如,一個平臺如何處理「../」模式的編碼或變體。
有沒有像這樣的東西已經實施?
我想有一個標準的功能,將相對路徑轉換爲絕對路徑,如果可能我想盡可能跨平臺(所以我' d喜歡避免調用外部庫函數)。這是爲了防止路徑利用。安全的跨平臺功能,以獲得規範化的路徑
我知道這樣的函數將無法檢測到符號鏈接,但對於我的應用程序而言,我可以。
我可以推出自己的代碼,但可能會有一些問題,例如,一個平臺如何處理「../」模式的編碼或變體。
有沒有像這樣的東西已經實施?
因爲C或C++標準庫中沒有這樣的函數,所以沒有可以調用的單一通用函數。在Windows上,您可以使用GetFullPathName
。在Linux,Mac OS X和其他基於Unix的系統上,您可以使用realpath(3)
函數,該函數也可以解決符號鏈接問題。
請注意:任何對此的解決方案在單線程程序中都是可靠的。如果您使用多個線程,則另一個線程可能會出現並意外更改工作目錄,從而更改路徑名稱解析。
我認爲最接近平臺獨立性的是POSIX libraries。特別是你會想看看unistd.h,不幸的是我不相信有一個「標準化」的路徑概念。如果我沒有記錯的話,標準本身甚至不知道有關目錄的知識,更不用說相關的知識。
爲了獲得比這更好的結果,我認爲你需要推出自己的道路好吃的東西。
如果我能保證它能覆蓋所有情況,我就不會遇到自己的解決方案。我不確定,例如,如果有任何編碼陷阱可能仍然容易受到攻擊 – Waneck
跨平臺是否意味着Windows? –
這將是偉大的,如果它! :) 但是,任何指向正確路徑的解決方案都是好的! – Waneck