【发布时间】:2020-10-16 16:20:58
【问题描述】:
我正在尝试在使用 TypeScript 和 TypeOrm 编写的项目中使用 PostgreSQL 中的 pg_trgm 模块实现搜索。
对我有用的 SQL 如下所示:
SELECT t, similarity(t, 'word') AS sml
FROM test_trgm
WHERE t % 'word'
ORDER BY sml DESC, t;
但是当我开始将它集成到我的构建器中时,我意识到我无法保护 select 语句免受 SQL 注入,因为 TypeOrm 不提供在任何选择方法中绑定参数(例如SelectQueryBuilder::addSelect、SelectQueryBuilder::select )。
我的易受攻击方法示例:
...
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
if (needle) {
builder.addSelect(`similarity(title, ${needle})`);
builder.andWhere('title % :needle', { needle });
}
}
...
也许有人知道在我的技术堆栈中实现这种搜索的更好方法?
【问题讨论】:
-
查询生成器的使用是对参数进行转义,所有的参数都要转义。您可以自己尝试并查看输出查询。阅读:github.com/typeorm/typeorm/issues/3696
标签: postgresql typescript typeorm