【问题标题】:How should I validate my inputs in the backend?我应该如何在后端验证我的输入?
【发布时间】:2021-09-19 12:42:23
【问题描述】:

我的网络应用会收到大量用户生成的内容。我想通过验证用户生成的输入来提高基本安全性。我的后端正在运行 Node+Express。

我应该如何实现输入验证?

  1. 使用断言? 来自 Python,我开始编写断言语句: 断言(title.length > 0)

  2. 使用快速验证器? 然后我发现有表单验证库,比如 express-validator。这似乎是“正确”的做法。但与简单的断言语句相比,实际上我似乎需要将需要编写的代码行数增加一倍或三倍。

  3. 使用 TypeScript? 然后我意识到也许我可以只用 TypeScript 编写一些我的 Node 代码,它会为我完成所有的验证。

  4. ?

我应该使用哪种方法?

【问题讨论】:

    标签: node.js typescript express express-validator


    【解决方案1】:

    您应该做的第一件事是清理用户输入以防止 XSS。 为此有很多 NPM 包,DOMPurify 做得很好。

    验证输入的最基本方法是使用 if 语句,例如:

    app.post("/user", (req, res) => {
        const { email, password } = req.body;
        if (!email || !validator.isEmail(email)) {
            return res.status(400).send("Invalid email");
        } else if (!password || password.length < 8) {
            return res.status(400).send("Invalid password");
        }
        // Do stuff
        return res.sendStatus(200);
    });

    验证库非常有用,在上面的示例中,我使用了来自 validatorisEmail 函数。

    请注意,TypeScript进行任何运行时验证,它在编译时执行类型检查,然后将整个 TypeScript 代码编译成 JavaScript,剥离所有类型。

    这意味着,例如,即使您在 TypeScript 中指定为字符串的字段在运行时结果是数字,JavaScript 也不会抛出任何错误,因此确保每个输入字段已验证。

    验证每个请求中的每个输入可能会变得非常重复且难看,但幸运的是您可以实现Express middlewares,您可以轻松地将其添加到需要它们的请求中。

    【讨论】:

    • 使用断言语句是否也是一种错误的方式来解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多