sql >> Database >  >> NoSQL >> MongoDB

JavaScript NoSQL-injectiepreventie in MongoDB

Sushant's antwoord is niet correct. Je nodig om op de hoogte te zijn van NoSQL-injectie in MongoDB.

Voorbeeld (van hier genomen)

User.findOne({
    "name" : req.params.name, 
    "password" : req.params.password
}, callback); 

Als req.params.password is { $ne: 1 } , wordt de gebruiker opgehaald zonder het wachtwoord te kennen ($ne betekent niet gelijk aan 1 ).

MongoDB-stuurprogramma

U kunt mongo-sanitize gebruiken:

Het verwijdert alle sleutels die beginnen met '$' in de invoer, zodat u deze kunt doorgeven aan MongoDB zonder dat u zich zorgen hoeft te maken over het overschrijven van kwaadwillende gebruikers.

var sanitize = require('mongo-sanitize');

var name = sanitize(req.params.name);
var password = sanitize(req.params.password);

User.findOne({
    "name" : name, 
    "password" : password
}, callback); 

Mangoestrijder

Omdat het een schema volgt, als het wachtwoord is een stringveld, het zal het object { $ne: 1 } . converteren te rijgen en er wordt geen schade aangericht. In dit geval hoeft u niet te ontsmetten, maar vergeet niet om een ​​goed schema in te stellen.



  1. MongoDB $mod

  2. Hoe ongebruikte indexen in MongoDB te vinden?

  3. Waarom is er slechts één verbinding met redis gemaakt in dit gevent-programma?

  4. Transactionele creatie met validatie in ServiceStack Redis Client