我们应该在前端还是后端构建 Mongoose 查询?
Should we build Mongoose queries on the frontend or backend?
我们可以使用 $lte
、$gt
、$ne
等选项使用 Mongoose 构建复杂查询...但我想知道 where/how 我们应该构建那些查询?
如果我的前端有一个允许输入日期范围的表单,我可以发送一个如下所示的请求正文:
{
date: {
$gt: "01/01/2021",
$lte: "31/01/2021"
}
}
但这是好的做法吗?如果不是,我应该以什么格式发送它以及如何将它转换为 Mongoose 查询?
假设你在请求正文中发送它,那么这不是你应该做的,这可能会暴露一个安全漏洞,因为你的攻击者可以自己编写查询并检索机密信息您的后端将 运行 可能用于公开敏感信息的任何查询。
数据库是后端应该处理的东西,而不是前端,不要让前端写查询。相反,只需像这样发送数据:
{
"startDate": "1/1/1",
"endDate": "2/2/2"
}
然后在你的后端你可以从请求体中获取值并自己做
{
date: {
$gt: startDate,
$lte: endDate
}
}
这个我也想过。目前,我们的 API 中有一些路由接受 req.body 中的自定义查询,就像您的示例一样,但是它们只是“查找”路由,并且受我们的身份验证中间件保护。这使得在前端通过各种属性查找文档变得容易 VS 为每个参数构建一个路由。
不确定这是否是最佳做法,但如果我们对我们的身份验证系统没有信心,那么人们无论如何都可以读取我们的所有数据,所以我不确定允许他们发送自定义查询会怎样做更糟?
我们可以使用 $lte
、$gt
、$ne
等选项使用 Mongoose 构建复杂查询...但我想知道 where/how 我们应该构建那些查询?
如果我的前端有一个允许输入日期范围的表单,我可以发送一个如下所示的请求正文:
{
date: {
$gt: "01/01/2021",
$lte: "31/01/2021"
}
}
但这是好的做法吗?如果不是,我应该以什么格式发送它以及如何将它转换为 Mongoose 查询?
假设你在请求正文中发送它,那么这不是你应该做的,这可能会暴露一个安全漏洞,因为你的攻击者可以自己编写查询并检索机密信息您的后端将 运行 可能用于公开敏感信息的任何查询。
数据库是后端应该处理的东西,而不是前端,不要让前端写查询。相反,只需像这样发送数据:
{
"startDate": "1/1/1",
"endDate": "2/2/2"
}
然后在你的后端你可以从请求体中获取值并自己做
{
date: {
$gt: startDate,
$lte: endDate
}
}
这个我也想过。目前,我们的 API 中有一些路由接受 req.body 中的自定义查询,就像您的示例一样,但是它们只是“查找”路由,并且受我们的身份验证中间件保护。这使得在前端通过各种属性查找文档变得容易 VS 为每个参数构建一个路由。
不确定这是否是最佳做法,但如果我们对我们的身份验证系统没有信心,那么人们无论如何都可以读取我们的所有数据,所以我不确定允许他们发送自定义查询会怎样做更糟?