Dizin Aşımı (ARCH5103)
Anahtar go.security.path-traversal · Önem error · Kategori security · CWE CWE-22
Kullanıcı girdisinden gelen bir dosya adını doğrulamadan dosya yoluna eklemek, saldırganların ../ dizileriyle hedef dizin dışındaki dosyalara erişmesine olanak tanır.
Hatalı
Bölüm başlığı “Hatalı”func serve(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("file") data, err := os.ReadFile(filepath.Join("/srv/files", name)) if err != nil { http.Error(w, "not found", 404) return } w.Write(data)}func serve(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("file") clean := filepath.Join("/srv/files", filepath.Clean("/"+name)) if !strings.HasPrefix(clean, "/srv/files/") { http.Error(w, "forbidden", 403) return } data, err := os.ReadFile(clean) if err != nil { http.Error(w, "not found", 404) return } w.Write(data)}Düzeltme
Bölüm başlığı “Düzeltme”Yolu filepath.Clean ile normalleştirin ve sonucun hedef kök dizin içinde kaldığını doğrulayın.