Menjaga Laluan Fail: Mencegah Serangan Traversal Direktori

Susan Sarandon
Lepaskan: 2024-10-21 22:56:30
asal
345 orang telah melayarinya

Securing File Paths: Preventing Directory Traversal Attacks

Pengendalian laluan fail yang tidak betul boleh membawa kepada kelemahan keselamatan yang dikenali sebagai serangan traversal direktori. Kerentanan ini membenarkan penyerang mengakses fail sewenang-wenangnya pada pelayan.

Apakah itu Serangan Traversal Direktori?

Serangan traversal direktori berlaku apabila penyerang memanipulasi laluan fail untuk mengakses fail di luar direktori yang dimaksudkan. Contohnya, jika aplikasi menggunakan laluan fail yang disediakan pengguna tanpa pengesahan, penyerang boleh menggunakan laluan seperti ../../etc/passwd untuk mengakses fail sensitif pada pelayan.

Contoh Serangan Traversal Direktori:

  1. Kod Terdedah:
const filePath = `public/uploads/${req.params.fileName}`;
Salin selepas log masuk

Bayangkan anda mempunyai fungsi muat turun fail yang membolehkan pengguna memuat turun fail dengan menyediakan id. Aplikasi mungkin membina laluan fail terus daripada input pengguna.

  1. Input Hasad:
/public/uploads/../../secret.txt
Salin selepas log masuk

Di sini penyerang boleh memberikan input berniat jahat seperti ../../secret.txt, yang membawa kepada akses fail yang tidak diingini.

  1. Akibat:

Jika aplikasi tidak mengesahkan input ini, ia boleh mendedahkan fail sensitif, seperti fail konfigurasi atau data pengguna, kepada penyerang.

Contoh mencegah serangan sedemikian

import path from 'path';
import fs from 'fs/promises';
import { RequestHandler, NextFunction } from 'express';

// Point: 1
const BASE_DIRECTORY = path.resolve(__dirname, 'public/uploads');

export const downloadAttachment: RequestHandler = async (req, res, next: NextFunction) => {
    // Point: 2
    const { fileName } = req.params; 

    // Point: 3
    const filePath = path.join(BASE_DIRECTORY, fileName);
    const resolvedPath = path.resolve(filePath);

    // Point: 4
    if (!resolvedPath.startsWith(BASE_DIRECTORY)) {
        return res.status(400).json({ message: "Invalid file path" });
    }

    try {
        // Point: 5
        await fs.access(resolvedPath);

        // Point: 6
        res.download(resolvedPath, path.basename(fileName), (err) => {
            if (err) {
                return next(err);
            }
        });
    } catch {
        // Point: 7
        return res.status(404).json({ message: "File not found" });
    }
};
Salin selepas log masuk

Perkara Utama Dijelaskan:

  1. Definisi Direktori Asas: Mewujudkan direktori tetap untuk muat naik fail untuk menyekat akses.

  2. Mengekstrak Nama Fail: Mengambil semula nama fail yang diminta daripada parameter URL.

  3. Pembinaan Laluan Fail: Menggabungkan direktori asas dengan nama fail yang diminta untuk mencipta laluan penuh.

  4. Pengesahan Laluan: Memastikan laluan fail yang diselesaikan berada dalam direktori asas yang ditetapkan untuk menghalang akses tanpa kebenaran.

  5. Semakan Kewujudan Fail: Asynchronously menyemak sama ada fail wujud pada laluan yang dibina.

  6. Pengendalian Muat Turun Fail: Memulakan muat turun fail dan mengendalikan sebarang ralat yang mungkin berlaku semasa proses.

  7. Ralat Mengendalikan Fail Hilang: Menghantar respons 404 jika fail yang diminta tidak wujud.


Pengiktirafan: Dokumen ini merujuk maklumat daripada PortSwigger Web Security dan ChatGPT.


Atas ialah kandungan terperinci Menjaga Laluan Fail: Mencegah Serangan Traversal Direktori. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!