路徑遍歷
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
OWASP 類別:MASVS-STORAGE:儲存空間
總覽
如果攻擊者可以控制路徑的特定部分,卻在未驗證的情況下將其傳遞至檔案系統 API,就會發生路徑周遊安全漏洞。這可能導致未授權的檔案系統運作。舉例來說,攻擊者可能會利用特殊字元 (例如 ../
),周遊至目標目錄之外,從而意外變更資源目標。
影響
影響有很多種,具體取決於作業性質和檔案內容,但一般都會導致檔案遭到覆寫 (寫入檔案時)、資料外洩 (讀取檔案時) 或權限變更 (變更檔案/目錄權限時)。
因應措施
使用 File.getCanonicalPath()
將路徑標準化,並比對前置字串與預期目錄:
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
Java
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
另一種最佳做法是使用驗證功能,確保僅出現預期的結果。相關示例包括:
- 檢查檔案是否已存在,以免發生意外覆寫的情形。
- 檢查指定檔案是否為預期的目標,以免資料外洩或權限變更出錯。
- 檢查目前的作業目錄是否與標準路徑的傳回值完全相同。
- 確保權限系統明確限定在作業範圍內,例如檢查該系統並非以根層級執行服務,並確認目錄權限的範圍僅限於指定的服務或指令。
為您推薦
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2024-01-05 (世界標準時間)。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"缺少我需要的資訊"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"過於複雜/步驟過多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"過時"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻譯問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/程式碼問題"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"容易理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"確實解決了我的問題"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2024-01-05 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2024-01-05 (世界標準時間)。"]]