web-dev-qa-db-fra.com

Comment puis-je purifier mes valeurs d'entrée dans le nœud js?

J'ai validé mes entrées Node.js pour qu'elles ne soient pas vides, mais je veux aussi les désinfecter. S'il vous plaît, aidez-moi comment je peux le faire.

req.checkBody('name', 'Name is required!').notEmpty();
req.checkBody('surname', 'Surname is required!').notEmpty();
req.checkBody('username', 'Username is required!').notEmpty();
req.checkBody('password', 'Password is required!').notEmpty();
req.checkBody('password2', 'Passwords do not match!').equals(req.body.password);

var errors = req.validationErrors();

if (errors) {
    res.render('user/register', {
        errors: errors,
        user: null,
        title: 'Register'
    });
}
else {
    var userData = {
        name : req.body.name,
        surname : req.body.surname,
        username : req.body.username,
        password : req.body.password,
        avatar : 'No_person.jpg'
    };
    userController.addUser(req,res,userData);
}
16
V.Aleksanyan
  • Pour la plupart du framework, vous pouvez utiliser le module de nœud sanitize :

    npm install sanitize --save
    

    Et puis peut utiliser comme:

    var sanitizer = require('sanitize')();
    
    var name = sanitizer.value(req.name, 'string');
    var surname= sanitizer.value(req.surname, 'string');
    

    Pour plus d'informations, consultez la documentation sanitize

  • Si vous utilisez express, vous pouvez valider et nettoyer à l'aide des fonctionnalités express intégrées comme suit:

    const express = require('express')
    const app = express()
    
    app.use(express.json())
    
    app.post('/form', [
      check('name').isLength({ min: 3 }).trim().escape(),
      check('email').isEmail().normalizeEmail(),
      check('age').isNumeric().trim().escape()
    ], (req, res) => {
      const name  = req.body.name
      const email = req.body.email
      const age   = req.body.age
    })  
    

    Pour en savoir plus, consultez la documentation express-validator et express-sanitize-input .

  • Si vous utilisez Hapi, vous pouvez alors valider et assainir en utilisant Joi , avec le Joi vous pouvez assainir la variable avec des options d'addition

    validate(value, schema, {escapeHtml: true}, [callback])
    

    Pour en savoir plus, consultez la documentation Joi .

  • Si vous ne souhaitez pas utiliser de module tiers et que vous souhaitez assainir à l'aide du nœud intégré. vous pouvez essayer de suivre:

    // For string variables
    str = typeof(str) == 'string' && str.trim().length > 0 ? str.trim() : '';
    // for boolean values
    bool = typeof(bool) == 'boolean' && bool == true ? true : false;
    // for array values
    arr = typeof(arr) == 'object' && arr instanceof Array ? arr : [];
    // for number values
    num = typeof(num) == 'number' && num % 1 === 0 ? num : 0;
    // for objects
    obj = typeof(obj) == 'object' && obj !== null ? obj : {};
    
8
kgangadhar

En fait, j'ai écrit un package pour résoudre facilement ce problème. Vous pouvez l'utiliser ou y contribuer sur Github.

Téléchargez ce package à partir d'ici: https://www.npmjs.com/package/string-sanitizer

Vous pouvez utiliser ce package d'utilitaires pour désinfecter même les langues étrangères autres que l'anglais. Sous le capot, l'expression régulière est utilisée dans cette bibliothèque. Vous pouvez convertir votre chaîne en chaîne conviviale URL ou nom de fichier. Les cas d'utilisation sont donnés ci-dessous

var string = require("string-sanitizer");

string.sanitize("a.bc@d efg#h"); // abcdefgh
string.sanitize.keepSpace("a.bc@d efg#h"); // abcd efgh
string.sanitize.keepUnicode("a.bc@d efg#hক"); // abcd efghক
string.sanitize.addFullstop("a.bc@d efg#h"); // abcd.efgh
string.sanitize.addUnderscore("a.bc@d efg#h"); // abcd_efgh
string.sanitize.addDash("a.bc@d efg#h"); // abcd-efgh
string.sanitize.removeNumber("@abcd efgh123"); // abcdefgh
string.sanitize.keepNumber("@abcd efgh123"); // abcdefgh123
string.addFullstop("abcd efgh"); // abcd.efgh
string.addUnderscore("@abcd efgh"); // @abcd_efgh
string.addDash("@abcd efgh"); // @abcd-efgh
string.removeSpace("@abcd efgh"); // @abcdefgh

Codeblock

enter image description here

1
Md Fazlul Karim