我正在尝试实现与PostgreSQL的TypeScript和TypeOrm编写的项目中的pg_trgm模块搜索。SQL对我有效的方法如下所示:
SELECT t, similarity(t, 'word') AS sml
FROM test_trgm
WHERE t % 'word'
ORDER BY sml DESC, t;但是当我开始将它集成到我的构建器中时,我意识到我不能保护select语句不受SQL注入的影响,因为TypeOrm不提供在任何select方法(如SelectQueryBuilder::addSelect、SelectQueryBuilder::select)中绑定参数。
我的易受攻击方法的示例:
...
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
if (needle) {
builder.addSelect(`similarity(title, ${needle})`);
builder.andWhere('title % :needle', { needle });
}
}
...也许有人知道在我的技术堆栈中实现这种搜索的更好方法?
发布于 2019-08-21 19:16:16
这个问题的决定是下一步在where和select语句中使用相同的绑定键。
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
if (needle) {
builder.addSelect(`similarity(title, :needle)`);
builder.andWhere('title % :needle', { needle });
}
}发布于 2020-10-15 21:37:07
我需要一个类似的解决方案,但是你的解决方案不适合我。如果您想要更改select中的参数,则应该查看setParameter,这是addWhere的第二个参数在内部执行的操作。
所以在你的情况下,你可以
applySearch(builder: SelectQueryBuilder<any>, needle: string) {
if (needle) {
builder.addSelect(`similarity(title, :title)`);
builder.andWhere('title % :needle', { needle });
builder.setParameter('title', needle);
}
}https://stackoverflow.com/questions/57553534
复制相似问题