在Sequelize中使用findOrCreate时如何防止SQL注入?

夏侯梦森 阅读 28

最近在用Sequelize做用户注册功能时,发现直接拼接查询条件可能会有SQL注入风险。比如这样写:


User.findOrCreate({
  where: {
    username: req.body.username
  },
  defaults: {
    password: req.body.password
  }
})

但查文档后看到应该用参数化查询,可我这样改之后总报错:


User.findOrCreate({
  where: sequelize.literal("username = ?"),
  replacements: [req.body.username],
  defaults: {...}
})

错误提示说找不到正确的参数绑定方式。那正确的findOrCreate参数化写法应该是什么样的?直接用req.body传参到底安不安全?

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
轩辕文亭
直接用req.body传参是安全的,Sequelize的findOrCreate默认就是参数化查询,你第一种写法根本没问题。where里用literal加replacements是给raw query用的,findOrCreate不认这个。我之前这样搞也踩过坑,后来发现原生的where: { username: req.body.username }自动防注入,别乱改就行。
点赞 4
2026-02-11 11:06