TypeORM里用Raw写SQL会有注入风险吗?

一家淼 阅读 98

我最近在用TypeORM的Raw函数拼接查询条件,但担心这样会不会有SQL注入漏洞?比如下面这段代码:

const users = await getRepository(User)
  .find({
    where: {
      name: Raw(alias => <code>${alias} LIKE &#039;%${keyword}%&#039;</code>)
    }
  });

虽然功能跑通了,但keyword是用户输入的,直接插进字符串里总觉得不安全。官方文档说要用参数化,但Raw里怎么传参啊?有没有更安全的写法?

我来解答 赞 29 收藏
二维码
手机扫码查看
2 条解答
Good“培乐
确实有注入风险,别这么拼字符串!改成这样:

const users = await getRepository(User).find({
where: {
name: Raw(alias => ${alias} LIKE :keyword, { keyword: %${keyword}% })
}
});


用命名参数传值最安全,TypeORM会自动处理转义。我上次项目审计就是因为这个被骂过...
点赞 2
2026-03-06 22:01
上官可歆
确实有注入风险!Raw里要用参数化查询,别直接拼接字符串。安全写法应该是这样:

const users = await getRepository(User)
.find({
where: {
name: Raw(alias => ${alias} LIKE :keyword, { keyword: %${keyword}% })
}
});


这样TypeORM会帮你做参数转义。记着永远别把用户输入直接扔进SQL字符串,这习惯很危险。
点赞
2026-03-06 01:01