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);
}
ほとんどのフレームワークでは、 sanitize
nodeモジュールを使用できます:
npm install sanitize --save
そして、次のように使用できます:
var sanitizer = require('sanitize')();
var name = sanitizer.value(req.name, 'string');
var surname= sanitizer.value(req.surname, 'string');
詳細については sanitize documentation
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
})
詳細については、 express-validator および express-sanitize-input のドキュメントをご覧ください。
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 : {};
実際、この問題を簡単に解決するためのパッケージを作成しました。 Githubで使用したり、貢献したりできます。
このパッケージをここからダウンロードします。 https://www.npmjs.com/package/string-sanitizer
このユーティリティパッケージを使用して、英語以外の外国語でもサニタイズできます。内部では、このライブラリでは正規表現が使用されます。文字列をURLまたはファイル名に適した文字列に変換できます。以下にユースケースを示します
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