我正在構建一個web服務,用戶可以上傳zip文件解壓縮並保存到我們的服務器。是否可以使用Javas File構造函數進行路徑遍歷?
我創建了下面的函數在一個指定的路徑打開文件:
private File secureOpenFile(String fileName, String directorypath){
return new File(directorypath, fileName);
}
但安全掃描告訴我,這是不是安全的,因爲它有路徑遍歷的可能性。給出的參數(「../../notsafe」,‘uploadfolder’),將允許惡意攻擊者改寫其他文件...
但是,文件類的文檔中,我發現以下幾點:https://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.io.File,%20java.lang.String)
否則,父抽象路徑名被用來表示一個目錄,子路徑名字符串被用來表示目錄或文件。如果子路徑名字符串是絕對的,那麼它將以依賴於系統的方式轉換爲相對路徑名。如果parent是空的抽象路徑名,則通過將child轉換爲抽象路徑名並根據系統相關的默認目錄解析結果來創建新的File實例。否則,每個路徑名字符串都會被轉換爲一個抽象路徑名,並且該子抽象路徑名會根據父級進行解析。
其中我解釋爲:不離開父文件夾。我正確與否?這段代碼安全嗎?如果現在:解決這個安全問題的最好方法是什麼?
你有參數來自用戶的任何輸入? – ProgrammerBoy
嘿ProgrammerBoy。第二個參數,即文件名,來自用戶上傳的zip文件。我懷疑用戶可以在這個zip文件中加入任何奇怪的東西,所以我不相信這個輸入... – rmeertens