问题描述
我正在运行一些代码,我在质疑 API 端点上应用的验证/卫生级别。 (使用 Nodejs/Express)
customerRoute.post('/signup',(req,res) => {
var email = req.body.email;
var firstName = req.body.firstName;
var lastName = req.body.lastName;
if (!validate.STRING(firstName)) {
res.apiError(messages.server.invalid_request);
} else if (!validate.STRING(lastName)) {
res.apiError(messages.server.invalid_request);
} else if (!validate.STRING(email)) {
res.apiError(messages.server.invalid_request);
} else if (!validate.EMAIL(email)) {
res.apiError(messages.shared.invalid_email);
} else {
var schemaObj = {
firstName: firstName,lastName: lastName,email: email
};
和自定义模块验证:
module.exports.STRING = function(str) {
if (typeof str !== 'string') {
return false;
}
return true;
}
module.exports.EMAIL = function(email) {
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
目前,可以在名称字段中添加脚本标签,这些标签会被添加到数据库中。但是,尝试在电子邮件中添加“https://github.com/validatorjs/validator.js#sanitizers)它提到
转义 - 用 HTML 实体替换 、&、'、" 和 /。
提前致谢。
解决方法
我建议您不要使用自定义模块进行验证和清理,而是使用 validator 它具有用于规范化电子邮件以及其他多项操作的内置函数。