我验证了我的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);
}
5条答案
按热度按时间mrfwxfqh1#
sanitize
节点模块:然后可以使用像:
有关更多信息,请参阅sanitize文档
express
,那么您可以使用express-validator和express-sanitize-input包进行验证和清理,如下所示:有关更多信息,请参阅express-validator和express-sanitize-input文档。
Hapi
,那么您可以使用Joi进行验证和清理。使用Joi,您可以使用其他选项清理变量有关更多信息,请参阅Joi文档。
stszievb2#
实际上,我写了一个包来轻松解决这个问题。你可以在Github上使用它或贡献它。
从这里下载这个包:https://www.npmjs.com/package/string-sanitizer
您可以使用此实用程序包来清理英语以外的其他语言。这个库使用了正则表达式。您可以将字符串转换为URL或文件名友好的字符串。使用案例如下所示
Codeblock
mo49yndu3#
validator
每周有500万次下载,似乎是目前业界最受欢迎的软件包。express-validator
使用validator
作为其核心。这些当然是一个选择,其他包如xss
和sanitize-html
也是如此关于这两个验证程序包都有大量的文档,这里是关于清理的部分:
https://express-validator.github.io/docs/sanitization.html
zpqajqem4#
我使用Yup进行验证。这是一个小得多的包比Joi。我在前端和后端都使用了Yup,我通常将验证放入一个共享的npm包中,前端和后端项目都可以拥有相同的验证库
然后
Yup的网站:
Yup是一个用于值解析和验证的JavaScript模式构建器。定义架构、转换值以进行匹配、验证现有值的形状,或同时执行这两项操作。是的,模式非常有表现力,允许对复杂的、相互依赖的验证或值转换进行建模。
Yup的API深受Joi的启发,但更精简,并将客户端验证作为其主要用例。Yup将解析和验证功能分离到单独的步骤中。cast()转换数据,而validate检查输入是否是正确的形状。每一个都可以一起执行(例如HTML表单验证)或单独执行(例如反序列化来自API的受信任数据)。
您可能希望为特殊项目(如密码匹配等)创建自己的验证器。这可以使用regex来完成,然后将函数添加到Yup中,如下所示:
把所有的验证函数放到你的共享NPM包中(包括你的类型脚本类型等)。前端团队与后端的验证不同步的情况现在将不那么令人担忧。
e4yzc0pl5#
您可以创建自定义中间件,可以集成到任何端点(或全局地针对每个请求),它将检查请求
body
中的任何输入是否有问题。它将检查是否:
=
,这使得Excel导入容易受到攻击。中间件
用法