2015-02-25 10 views
10

Fatta eccezione per this fairly uninformative answer e un altro unpopular answer, non riesco a trovare alcuna risorsa per disinfettare l'input dell'utente usando Mongoose.Sanitizza l'input dell'utente in Mongoose

C'è un blog post here su iniezione Nodo/MongoDB che sembra buono a livello di server, ma ci deve essere qualcosa nel livello di middleware (vale a dire Mongoose) in grado di sterilizzare input e assicurare una ragionevole sicurezza nel database.

Esiste una tale bestia o è addirittura necessaria?

+1

@JohnnyHK ti sembra di essere un esperto qui - si può pesare? – Ben

risposta

12

Sembra che il modulo n. mongo-sanitize npm sia il punto da cui partire per la funzionalità di escape primaria. Onestamente questo sembra più appropriato al livello middleware connect/express perché al livello di mangusta, di progettazione, il codice non esercita alcuna aspettativa sui parametri di query/aggiornamento in termini di se sono scritti dallo sviluppatore dell'applicazione (nel qual caso essi non deve essere disinfettato o non funzionerà correttamente) o coinvolgere l'input dell'utente (che deve essere disinfettato). Pertanto, consiglierei le funzioni middleware per disinfettare i luoghi più comuni in cui inserire l'input dell'utente: req.body, req.query e req.params. Così, per esempio, si potrebbe fare qualcosa di simile (disegno):

var json = require("body-parser").json; 
var sanitize = require("mongo-sanitize"); 

function cleanBody(req, res, next) { 
    req.body = sanitize(req.body); 
    next(); 
} 

function updateUser(req, res) { 
    //... 
    // safe to build an update query involving req.body here 
} 
app.put("/api/users", json(), cleanBody, updateUser); 
+0

'Per gli appassionati di pigro ...' Mi piace già - sembra che sia quello che stavo cercando. Il tuo punto sull'igienizzazione prima di passare al livello del modello di dati ha molto senso. Grazie Peter, e ottimo sito web BTW. – Ben

+1

Appena provato, funziona come pubblicizzato, facile da usare. – Ben

+0

Ispirato a mongo-sanitize (middleware espresso): https://github.com/fiznool/express-mongo-sanitize – Mike

0

v'è un nuovo strumento che fornisce il controllo automatico di venire dati URL e del corpo HTML. https://www.npmjs.com/package/content-filter

Anche il metodo nativo escape() può essere utilizzato per proteggere il database.

Eseguire il frammento di codice qui sotto per vedere i risultati.

let a = "{$gt:25}" 
 
console.log(a) 
 
console.log(escape(a))