Dizin geçişi (ARCH3103)
Anahtar typescript.security.path-traversal · Önem error · Kategori security · CWE CWE-22
Dosya yolunu doğrulamadan kullanıcı girdisinden oluşturmak, ../ dizileriyle hedef dizin dışındaki dosyalara (/etc/passwd gibi) erişime izin verir.
Hatalı
Bölüm başlığı “Hatalı”import { readFile } from "fs/promises";import path from "path";
app.get("/files", async (req, res) => { // name="../../etc/passwd" const data = await readFile(path.join("/data", req.query.name as string)); res.send(data);});import { readFile } from "fs/promises";import path from "path";
const ROOT = "/data";app.get("/files", async (req, res) => { const full = path.resolve(ROOT, req.query.name as string); if (!full.startsWith(ROOT + path.sep)) return res.status(400).end(); res.send(await readFile(full));});Düzeltme
Bölüm başlığı “Düzeltme”Yolu path.resolve ile normalleştirin ve sonucun hedef kök dizin içinde kaldığını doğrulayın.