使用 Sequalize.Op.eq 是否可以防止 sql 注入,或者是否也应该对输入进行规范化?

does using Sequalize.Op.eq prevent sql injections or should input also be normalized?

提问人:WeAreDoomed 提问时间:2/9/2023 更新时间:2/9/2023 访问量:99

问:

我正在使用 nodejs、express 和 sequlize 来显示表单并将其保存到数据库中。由于我是后端的新手,我想确保保存到数据库的数据是安全的。

如标题所述,是否足以用于防止 SQL 注入,或者是否也应该使用其他技术(例如规范化)?Seqlelize.Op.eq

该应用程序所做的是处理用户输入的“错别字”,并强调不正确的用法,并解释为什么是错误的。

因此,将保存到数据库的数据会有所不同。

这是我当前使用的代码

async function addStringToTable(string, uuid) {
    // Save the input string to the database
    try{
        await UserText.create({
            userText_field: { [Sequelize.Op.eq]: string },
            uuidv4: { [Sequelize.Op.eq]: uuid }
        });
    } catch (e) {
        console.log(e);
    }
}

另外,我还需要注意什么吗?

谢谢

节点 .js 安全 续集 .js SQL 注入 规范化

评论

0赞 Matt 2/9/2023
sequelize 运算符用于子句,除了允许您在不恢复原始文本的情况下构造一些更高级的查询外,在防止 SQL 注入方面并没有真正发挥直接作用。我不确定该代码/查询在运行时会做什么?WHERE
0赞 WeAreDoomed 2/9/2023
它将用户输入保存到数据库中,并且 uuid 将用于跟踪用户对文本/输入的每个“测试”所做的更改(用户输入)。

答:

2赞 Edward 2/9/2023 #1

这就是ORM的美妙之处。即使不使用额外的语法。基本上,只是写作就等同于你的语法

await UserText.create({
            userText_field: {  string },
            uuidv4: {  uuid }
        });

这会自动阻止 sql 注入。它等效于准备好的查询,在编写原始 sql 查询时会用到它。但是对于 sequalize(以及我知道的任何其他 ORM),它都是在每次查询时自动完成的,不需要特殊的语法。您还可以通过记录此均衡化代码输出的查询来确认

评论

0赞 WeAreDoomed 2/9/2023
谢谢,只是问确定一下,你是说我根本不需要吗?Sequalize.Op.eq
1赞 Edward 2/9/2023
@WeAreDoomed 是的,它根本不需要,产生与你相同的结果。任何使用 Sequalize 编写的代码都将受到保护,不会被 sql 注入
0赞 Edward 2/9/2023
@WeAreDoomed Oh 1 快速校正,直接定义时,不需要对象大括号{}。只需写userText_field:字符串即可。如果这回答了您的问题或您感兴趣的任何其他内容,请告诉我
0赞 WeAreDoomed 2/9/2023
呵呵,我还有很多其他问题,但我认为涵盖了这个问题,谢谢:)