Path Manipulationjava
經過用戶輸入控制 file system 操做所用的路徑,藉此攻擊者能夠訪問或修改其餘受保護的系統資源。程序員
當知足如下兩個條件時,就會產生 path manipulation 錯誤: 1. 攻擊者可以指定某一 file system 操做中所使用的路徑。 2. 攻擊者能夠經過指定特定資源來獲取某種權限,而這種權限在通常狀況下是不可能得到的。 例如, 在某一程序中,攻擊者能夠得到特定的權限,以重寫指定的文件或是在其控制的配置環境下運行程序。
例 1: 下面的代碼使用來自於 HTTP 請求的輸入來建立一個文件名。 程序員沒有考慮到攻擊者可能使用像 "../../tomcat/conf/server.xml" 同樣的文件名,從而致使應用程序刪除它本身的配置文件。tomcat
String rName = request.getParameter("reportName"); File rFile = new File("/usr/local/apfr/reports/" + rName); ... rFile.delete();
例 2: 下面的代碼使用來自於配置文件的輸入來決定打開哪一個文件,並返回給用戶。 若是程序在必定的權限下運行,且惡意用戶可以篡改配置文件,那麼他們能夠經過程序讀取系統中以 .txt 擴展名結尾的全部文件。code
fis = new FileInputStream(cfg.getProperty("sub")+".txt"); amt = fis.read(arr); out.println(arr);
防止 path manipulation 的最佳方法是採用一些間接手段:
例如建立一份合法資源名的列表,而且規定用戶只能選擇其中的文件名。 經過這種方法,用戶就不能直接由本身來指定資源的名稱了。
但在某些狀況下,這種方法並不可行,由於這樣一份合法資源名的列表過於龐大、難以跟蹤。 所以,程序員一般在這種狀況下采用黑名單的辦法。 在輸入以前,黑名單會有選擇地拒絕或避免潛在的危險字符。
可是,任何這樣一份黑名單都不多是完整的,並且將隨着時間的推移而過期。 比較好的方法是建立白名單,容許其中的字符出如今資源名稱中,且只接受徹底由這些被承認的字符所組成的輸入。server