用户输入 nodeJs 的卫生 - Express

问题描述

我正在运行一些代码,我在质疑 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 它具有用于规范化电子邮件以及其他多项操作的内置函数。