İçeriğe geç

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.

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));
});

Yolu path.resolve ile normalleştirin ve sonucun hedef kök dizin içinde kaldığını doğrulayın.