我的应用程序(主要是在骨干网中编写的客户端代码)与Node.js服务器接口。我的服务器的唯一目的是为我的骨干应用程序提供API端点。
GET
请求非常安全,攻击者无法在此处做很多事情。但我确实有一些POST和PUT请求。其中一个PUT
请求负责更新特定用户的投票计数,例如
app.put('/api/vote`, function(req, res) {
// POST form data from the client
var winningPerson = req.body.winner; // userID
var losingPerson = req.body.loser; // userID
}
我注意到有些人只是通过JS控制台或某种REST API控制台向一个特定用户发送PUT
个请求,从而绕过了用户界面强制执行的应用程序的意图。如果您按照预期使用此应用程序,它将永远不允许您连续多次为同一个人投票,更不用说数据库中的任意用户(假设您知道他们的用户ID)。
但是,是的,我知道:" 不信任客户"。 那么我该如何解决上述问题呢?某种 IP地址检查有助于防止在3-5分钟内多次投票吗? 我可以做什么来禁止从控制台访问我的API,以便用户不能随意选择他们想要的任何人,而只是通过用鼠标点击图像进行投票,或者至少投票从控制台只为这两个人,而不是任意人?
答案 0 :(得分:2)
答案在于您的服务器。它不应该允许用户在指定的时间跨度内多次投票。这是一种业务规则,您只能通过服务器强制执行,因为它在您的控制之下 用户界面中的任何强制执行都是好的和有利可图的,但不是防弹的。你肯定要检查服务器以确定。有很多more to the server's business logic比
我的服务器的唯一目的是为我的骨干应用程序提供API端点。
请勿尝试控制您无法控制的内容 - 应用程序的客户端。有些人投票次数更多,因为您(您的API)允许他们这样做。一旦您的服务器回复“尝试5分钟,伙计。”他们会停止这样做,或者至少在这样做时不会有任何伤害。