Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
send — Fork del modulo send per gestire CVE-2017-20165 | Kitploit
Strumenti/GitHubGitHub/fastify/send
Utilità GenericheSicurezza WebUtilità e Framework
GitHubfastify/send

send

Fork del modulo send per gestire CVE-2017-20165

Vedi RepositorySito web
151514 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

@fastify/send

CI NPM version neostandard javascript style

Send è una libreria per lo streaming di file dal filesystem come risposta HTTP, con supporto per risposte parziali (Range), negoziazione condizionale GET (If-Match, If-Unmodified-Since, If-None-Match, If-Modified-Since), elevata copertura dei test ed eventi granulari che possono essere sfruttati per eseguire azioni appropriate nella tua applicazione o framework.

Installazione

Questo è un modulo Node.js disponibile tramite il npm registry. L'installazione si effettua usando il comando npm install:

root@kitploit:~
$ npm install @fastify/send

TypeScript

@types/mime@3 deve essere utilizzato se si desidera usare TypeScript; @types/mime@4 ha rimosso i tipi mime.

root@kitploit:~
$ npm install -D @types/mime@3

API

root@kitploit:~
const send = require('@fastify/send')

send(req, path, [options])

Fornisce statusCode, headers e stream per il percorso specificato da inviare a un res. req è la richiesta HTTP Node.js e path è un percorso urlencoded da inviare (urlencoded, non il percorso effettivo del filesystem).

Opzioni

acceptRanges

Abilita o disabilita l'accettazione di richieste ranged, il valore predefinito è true. Disabilitando questa opzione non verrà inviato Accept-Ranges e verrà ignorato il contenuto dell'intestazione Range della richiesta.

cacheControl

Abilita o disabilita l'impostazione dell'intestazione di risposta Cache-Control, il valore predefinito è true. Disabilitando questa opzione verranno ignorate le opzioni immutable e maxAge.

contentType

Per impostazione predefinita, questa libreria utilizza il modulo mime per impostare il Content-Type della risposta in base all'estensione del file richiesto.

Per disabilitare questa funzionalità, imposta contentType a false. L'intestazione Content-Type dovrà essere impostata manualmente se disabilitata.

dotfiles

Imposta come vengono gestiti i "dotfile" quando vengono incontrati. Un dotfile è un file o una directory che inizia con un punto ("."). Nota che questo controllo viene effettuato sul percorso stesso, senza verificare se il percorso esiste sul disco. Se viene specificato root, vengono controllati solo i dotfile al di sopra della root (cioè la root stessa può trovarsi all'interno di un dotfile quando è impostata su "deny").

  • 'allow' Nessun trattamento speciale per i dotfile.
  • 'deny' Invia un 403 per qualsiasi richiesta di un dotfile.
  • 'ignore' Fai finta che il dotfile non esista e restituisci 404.

Il valore predefinito è simile a 'ignore', con l'eccezione che questo predefinito non ignora i file all'interno di una directory che inizia con un punto, per compatibilità con le versioni precedenti.

end

Offset in byte in cui termina lo stream, il valore predefinito è la lunghezza del file meno 1. La fine è inclusiva nello stream, il che significa che end: 3 includerà il 4° byte nello stream.

etag

Abilita o disabilita la generazione di etag, il valore predefinito è true.

extensions

Se un dato file non esiste, prova ad aggiungere una delle estensioni specificate, nell'ordine indicato. Per impostazione predefinita, questa opzione è disabilitata (impostata su false). Un esempio di valore che servirà file HTML senza estensione: ['html', 'htm']. Questo viene saltato se il file richiesto ha già un'estensione.

immutable

Abilita o disabilita la direttiva immutable nell'intestazione di risposta Cache-Control, il valore predefinito è false. Se impostato su true, deve essere specificata anche l'opzione maxAge per abilitare la cache. La direttiva immutable impedirà ai client supportati di effettuare richieste condizionali durante la vita dell'opzione maxAge per verificare se il file è cambiato.

index

Per impostazione predefinita send supporta i file "index.html"; per disabilitarlo imposta false oppure per fornire un nuovo indice passa una stringa o un array nell'ordine preferito.

lastModified

Abilita o disabilita l'intestazione Last-Modified, il valore predefinito è true. Utilizza il valore di ultima modifica del filesystem.

maxAge

Fornisce un max-age in millisecondi per la cache HTTP, il valore predefinito è 0. Può anche essere una stringa accettata dal modulo ms.

maxContentRangeChunkSize

Specifica la dimensione massima del contenuto della risposta, il valore predefinito è la dimensione totale del file. Verrà utilizzato quando acceptRanges è true.

root

Serve i file relativamente a path.

start

Offset in byte in cui inizia lo stream, il valore predefinito è 0. L'inizio è inclusivo, il che significa che start: 2 includerà il 3° byte nello stream.

highWaterMark

Se fornita, questa opzione imposta il numero massimo di byte che il buffer interno può contenere prima di mettere in pausa le letture dalla risorsa sottostante. Se ometti questa opzione (o passi undefined), Node.js torna al suo valore predefinito integrato per gli stream binari leggibili.

.mime

L'export mime è l'istanza globale del modulo npm mime.

Viene utilizzata per configurare i tipi MIME associati alle estensioni dei file, nonché altre opzioni su come risolvere il tipo MIME di un file (come il tipo predefinito da utilizzare per un'estensione di file sconosciuta).

Caching

Non esegue caching interno; dovresti usare un proxy inverso come Varnish per questo, o quelle cose fantastiche chiamate CDN. Se la tua applicazione è abbastanza piccola da trarre beneficio dal caching in memoria su singolo nodo, allora è abbastanza piccola da non aver bisogno di caching ;).

Debug

Per abilitare l'output di strumentazione debug() esporta NODE_DEBUG:

root@kitploit:~
$ NODE_DEBUG=send node app

Esecuzione dei test

root@kitploit:~
$ npm install
$ npm test

Esempi

Servire un file specifico

Questo semplice esempio invierà un file specifico a tutte le richieste.

root@kitploit:~
const http = require('node:http')
const send = require('send')

const server = http.createServer(async function onRequest (req, res) {
  const { statusCode, headers, stream } = await send(req, '/path/to/index.html')
  res.writeHead(statusCode, headers)
  stream.pipe(res)
})

server.listen(3000)

Servire tutti i file da una directory

Questo semplice esempio servirà tutti i file in una determinata directory come livello superiore. Ad esempio, una richiesta GET /foo.txt restituirà /www/public/foo.txt.

root@kitploit:~
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')

const server = http.createServer(async function onRequest (req, res) {
  const { statusCode, headers, stream } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
  res.writeHead(statusCode, headers)
  stream.pipe(res)
})

server.listen(3000)

Tipi di file personalizzati

root@kitploit:~
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')

// Default unknown types to text/plain
send.mime.default_type = 'text/plain'

// Add a custom type
send.mime.define({
  'application/x-my-type': ['x-mt', 'x-mtt']
})

const server = http.createServer(function onRequest (req, res) {
  const { statusCode, headers, stream } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
  res.writeHead(statusCode, headers)
  stream.pipe(res)
})

server.listen(3000)

Vista di indice di directory personalizzata

Questo è un esempio di servizio di una struttura di directory con una funzione personalizzata per visualizzare l'elenco di una directory.

root@kitploit:~
const http = require('node:http')
const fs = require('node:fs')
const parseUrl = require('parseurl')
const send = require('@fastify/send')

// Transfer arbitrary files from within /www/example.com/public/*
// with a custom handler for directory listing
const server = http.createServer(async function onRequest (req, res) {
  const { statusCode, headers, stream, type, metadata } = await send(req, parseUrl(req).pathname, { index: false, root: '/www/public' })
  if(type === 'directory') {
    // get directory list
    const list = await readdir(metadata.path)
    // render an index for the directory
    res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
    res.end(list.join('\n') + '\n')
  } else {
    res.writeHead(statusCode, headers)
    stream.pipe(res)
  }
})

server.listen(3000)

Servire da una directory root con gestione degli errori personalizzata

root@kitploit:~
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')

const server = http.createServer(async function onRequest (req, res) {
  // transfer arbitrary files from within
  // /www/example.com/public/*
  const { statusCode, headers, stream, type, metadata } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
  switch (type) {
    case 'directory': {
      // your custom directory handling logic:
      res.writeHead(301, {
        'Location': metadata.requestPath + '/'
      })
      res.end('Redirecting to ' + metadata.requestPath + '/')
      break
    }
    case 'error': {
      // your custom error-handling logic:
      res.writeHead(metadata.error.status ?? 500, {})
      res.end(metadata.error.message)
      break
    }
    default: {
      // your custom headers
      // serve all files for download
      res.setHeader('Content-Disposition', 'attachment')
      res.writeHead(statusCode, headers)
      stream.pipe(res)
    }
  }
})

server.listen(3000)

Licenza

Concesso in licenza sotto MIT.

Scarica lo strumento