1

我的应用程序(主要是用主干编写的客户端代码)与 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
}

我注意到有些人只是PUT通过 JS 控制台或某种 REST API 控制台向某个特定用户发送垃圾邮件请求,绕过了用户界面强制执行的应用程序的意图。如果您按预期使用此应用程序,它将永远不允许您连续多次投票给同一个人,更不用说数据库中的任意用户(假设您知道他们的用户 ID)。

But yes, yes I know: "Don't trust the client". So how can I fix the above problem? Will some kind of IP address checking help here to prevent voting multiple times within a span of 3-5 minutes? What can I do to disallow access to my API from the console so that users cannot arbitrarily vote for anyone they wish, but instead only vote by clicking on an image with a mouse, or at the very least vote from console just for those two people, not any arbitrary person?

4

1 回答 1

2

答案就在您的服务器中。它不应允许用户在指定的时间跨度内多次投票。这是一种您可以通过服务器强制执行的业务规则,因为它在您的控制之下。
UI 中的任何强制执行都是好的且有利可图的,但并非万无一失。你一定要检查服务器才能确定。服务器的业务逻辑远不止这些

我的服务器的唯一目的是为我的主干应用程序提供 API 端点。

不要试图控制你无法控制的东西——应用程序的客户端。有些人投票更多次,因为您(您的 API)允许他们这样做。一旦您的服务器回复“5 分钟后尝试,伙计”。他们会停止这样做,或者至少这样做不会造成伤害。

于 2013-06-21T06:25:55.720 回答