当前位置: 首页 > 知识库问答 >
问题:

输入验证、消毒和服务层

何高旻
2023-03-14
//userService.js function
function register(data, callback) {
    if (!data) {
        return callback(new Error('Here some error...'));
    }

    /* Sanitize and validate the data */

    /* Method #1 */
    //If not valid then call back with validationErrors
    if (notValid) {
        return callback({
            validationErrors: {
                'username': 'Username is already in use.',
                'email': 'Invalid characters.',
            }
        });
    }

    /* Method #2 */
    if (notValid) {
        return callback({
            fields: {
                //We put here a sanitized fields

            },
            validationErrors: {
                'username': 'Username is already in use.',
                'email': 'Invalid characters.',
            }
        });
    }

};


//userController.js function
// GET/POST: /register
function registerAction(request, response, next) {
    if (request.method === 'POST') {
        var registerData = {
            username: request.body['username'],
            password: request.body['password'],
            email: request.body['email'],
            firstName: request.body['firstName'],
            lastName: request.body['lastName'],
        };

        register(registerData, function(error, someDataIfSucceed) {
            if (error) {
                //Re-post the data so the user wont have to fill the form again

                //Sanitize registerData variable here.

                return response.render('register', {
                    error: error,
                    validationErrors: error.validationErrors
                });
            };

            //User registered succesfully.
            return response.render('registerSuccess');
        });

        return;
    }

    return response.render('register');
}
    null

共有1个答案

太叔繁
2023-03-14

如果使用Express,一个有趣的选项是:

>

  • 创建一个中间件,并使用express-validator将其用作验证层,该层基于Node-Validator。例如(有关所有验证/消毒选项,请参见节点验证器文档):

    exports.validate = function(req, res, next) {
    
      req.assert('username').notEmpty();
      req.assert('password').notEmpty();
      req.assert('email').isEmail();
      req.assert('firstName').len(2, 20).xss();
      req.assert('lastName').len(2, 20).xss();
    
      var errors = req.validationErrors(true);
    
      if (errors){
        res.status(400).json({ status: 'ko', errors: errors });
      }
      else {
        next();
      }
    
    }
    

    然后,在控制器中,只需获取经过验证的请求参数并运行注册逻辑(register函数调用和响应呈现),

  •  类似资料:
    • 简而言之,应该在哪里执行输入验证和身份验证验证?在 API 网关和每个微服务中?仅在 API 网关中?仅在每个微服务中? 也许部分在api网关中,部分在每个网关中? 谢谢你的回答!

    • 我正在尝试从我的数据库中获取第三方(潜在的不安全的)html内容,并将其插入到我的html文档中。 如何安全地做到这一点(针对XSS的保护)? 在Angular1.x中,以前有来清理输入,在Angular2中如何做到这一点?据我理解,Angular2默认情况下自动对其进行消毒,是这样吗? 像这样的东西是行不通的:

    • 根据经验,您永远不应该信任从最终用户收到的数据, 并且应该在充分利用之前对其进行验证。 要给 model 填充其所需的用户输入数据,你可以调用 yii\base\Model::validate() 方法验证它们。该方法会返回一个布尔值,指明是否通过验证。若没有通过,你能通过 yii\base\Model::$errors 属性获取相应的报错信息。比如, $model = new \app\mode

    • 主要内容:输入验证,应用代码,实例解析AngularJS 表单和控件可以验证输入的数据。 输入验证 在前面的几个章节中,你已经学到关于 AngularJS 表单和控件的知识。 AngularJS 表单和控件可以提供验证功能,并对用户输入的非法数据进行警告。 客户端的验证不能确保用户输入数据的安全,所以服务端的数据验证也是必须的。 应用代码 < !DOCTYPE html > < html > < script src= "http:/