MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

JavaScript-NoSQL-Injection-Verhinderung in MongoDB

Sushants Antwort ist nicht korrekt. Sie brauchen um sich der NoSQL-Einschleusung in MongoDB bewusst zu sein.

Beispiel (entnommen von hier)

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

Wenn req.params.password ist { $ne: 1 } , wird der Benutzer abgerufen, ohne das Passwort zu kennen ($ne bedeutet nicht gleich 1 ).

MongoDB-Treiber

Sie können mongo-sanitize verwenden:

Es entfernt alle Schlüssel, die mit „$“ in der Eingabe beginnen, sodass Sie sie an MongoDB übergeben können, ohne sich Gedanken über das Überschreiben durch böswillige Benutzer machen zu müssen.

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

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

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

Mungofahrer

Da folgt ein Schema, wenn das Passwort ein Zeichenfolgenfeld ist, wird es das Objekt { $ne: 1 } konvertieren zu besaiten und es wird kein Schaden angerichtet. In diesem Fall müssen Sie nicht bereinigen, denken Sie nur daran, ein geeignetes Schema festzulegen.