Prisma findUnique SQL注入安全吗



我创建了一个Nuxt3项目,通过该项目,我将Stripe中的产品加载到产品架中,它提取了所有基本信息,如名称、价格和描述,但我也提取了产品ID。

在结账时,我将使用stripe创建一个新的结账会话,在会话开始之前,我将通过将商店产品ID与客户端带来的ID进行比较来进行验证。

export async function validateProducts(client_cart) {
var valid = false;
for (let index = 0; index < client_cart.length; index++) {
// needs validation
if (typeof(client_cart[index].id) != "string") {
break;
}
//getProduct  - uses findUnique
const product = await getProduct(client_cart[index].id);
console.log(product)
... further validation occurs here that sets valid to true if it gets through all the 
tests without breaking the loop
return valid;
}

getProduct((将获取id,并使用prisma函数中的findUnique((将数据拉入服务器以验证/检查库存/持有。

export async function getProduct (id: string) {
return await prisma.product.findUnique({
where: {
id: id,
},
})
}

这基本上是直接从客户端提取cart产品对象,然后将id传递到findUnique((功能的where子句中。这是否容易受到SQL注入的攻击,或者Prisma是否"覆盖"了这些漏洞(没有更好的术语(?

浏览prisma文档:

"ORM有助于减少代码量。它们使您不用为常见的CRUD(创建-读取-更新-删除(操作编写重复的SQL语句,也不用为防止SQL注入等漏洞而转义用户输入">

无论如何,我的两个问题是:

  • 将条带中的productID暴露给客户端不好吗
  • 棱镜函数";findUnique(("易受SQL注入攻击

除非您使用的是$queryRawUnsafe$executeRawUnsafe,否则应该没问题。如有必要,Prisma将为您转义所有参数。查阅https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#sql-注入

我可以帮助回答第一个问题。

产品ID只是Stripe为产品资源生成的唯一标识符。只要你保持你的密钥安全,没有人能够通过拥有产品ID来检索产品的内容。

最新更新