将查询从反应前端传递到羽毛服务是好的做法吗?
is Passing query from react front end to feathers service good practice?
我在 React JS 中使用 rematch(https://github.com/rematch/rematch) ,并用于后端 Its Feathers。如果我想在特定条件下从数据库中获取记录,我可以通过 React 代码中的 API 调用传递查询。
例如
const empData = await employeeService.find({
query: {
$and:[
{employeeId: payload.empIId},
{name:"ABC"}
]
}
});
这直接将查询传递给自动生成的羽毛服务,并提供我预期的结果。
我的问题是,从前端传递这些类型的查询(可能比这更复杂)是一种好习惯吗?请详细说明(优缺点等)
让客户端直接执行查询通常不是一个好主意。您事先不知道该查询,这意味着任何人都可以 POST 操纵查询,该查询将绑定您的数据库,有效地对您进行 DDOS 攻击。由于您不检查输入,因此您无法抵御此类攻击。
在每个系统边界上验证输入总是一个好主意。
我们在多个项目中成功且广泛地做到了这一点。它创造了最大的灵活性。可以在客户端中实施更改,而不是要求同时更改客户端和服务器。
这应该结合不信任客户端的服务器来完成。服务器应该对输入查询进行清理和速率限制,以确保客户端没有收到任何它不应该收到的东西。
我在 React JS 中使用 rematch(https://github.com/rematch/rematch) ,并用于后端 Its Feathers。如果我想在特定条件下从数据库中获取记录,我可以通过 React 代码中的 API 调用传递查询。 例如
const empData = await employeeService.find({
query: {
$and:[
{employeeId: payload.empIId},
{name:"ABC"}
]
}
});
这直接将查询传递给自动生成的羽毛服务,并提供我预期的结果。
我的问题是,从前端传递这些类型的查询(可能比这更复杂)是一种好习惯吗?请详细说明(优缺点等)
让客户端直接执行查询通常不是一个好主意。您事先不知道该查询,这意味着任何人都可以 POST 操纵查询,该查询将绑定您的数据库,有效地对您进行 DDOS 攻击。由于您不检查输入,因此您无法抵御此类攻击。
在每个系统边界上验证输入总是一个好主意。
我们在多个项目中成功且广泛地做到了这一点。它创造了最大的灵活性。可以在客户端中实施更改,而不是要求同时更改客户端和服务器。
这应该结合不信任客户端的服务器来完成。服务器应该对输入查询进行清理和速率限制,以确保客户端没有收到任何它不应该收到的东西。