Как я могу дезинфицировать свои входные значения в node js?

Я проверил свои входные данные Node.js, чтобы они не были пустыми, но я также хочу очистить их. Пожалуйста, помогите мне, как я могу это сделать.

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

Ответ 1

  • Для большей части платформы вы можете использовать модуль sanitize узла:

    npm install sanitize --save
    

    И тогда можно использовать как:

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

    Для получения дополнительной информации можно пройти санитарную документацию

  • Если вы используете express, вы можете проверить и дезинфицировать, используя встроенные функции экспресс, следующим образом:

    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
    })  
    

    Для получения дополнительной информации можно пройти экспресс-валидатор и экспресс-sanitize-ввода документации.

  • Если вы используете Hapi, вы можете проверять и дезинфицировать с помощью Joi. С Joi вы можете дезинфицировать переменную с опциями добавления.

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

    Для получения дополнительной информации можно перейти к документации Joi.

  • Если вы не хотите использовать какой-либо сторонний модуль и хотите очистить его с помощью встроенного узла. Вы можете попробовать следующее:

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

Ответ 2

На самом деле, я написал пакет, чтобы легко решить эту проблему. Вы можете использовать его или внести свой вклад в Github.

Загрузите этот пакет отсюда: https://www.npmjs.com/package/string-sanitizer

Вы можете использовать этот пакет утилит для очистки даже иностранных языков, кроме английского. Под капотом в этой библиотеке используется регулярное выражение. Вы можете преобразовать вашу строку в URL или строку, понятную для имени файла. Варианты использования приведены ниже

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

string.sanitize("[email protected] efg#h"); // abcdefgh
string.sanitize.keepSpace("[email protected] efg#h"); // abcd efgh
string.sanitize.keepUnicode("[email protected] efg#hক"); // abcd efghক
string.sanitize.addFullstop("[email protected] efg#h"); // abcd.efgh
string.sanitize.addUnderscore("[email protected] efg#h"); // abcd_efgh
string.sanitize.addDash("[email protected] 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

кодоблок

enter image description here