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);
}
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 : {};
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