服务器端验证以防止非法POST请求

时间:2014-05-01 08:46:45

标签: javascript node.js angularjs

对于我的webapp(angular + node.js),我正在实施一个游戏化系统,用户可以获得积分来执行回答问题,观看视频等操作。目前,我只是发布到'/ api / users /更新点',用户的ID和点数已更改,以更新数据库。

这当然不安全,因为用户在登录时可以轻松地从控制台执行ajax请求,我想知道如何阻止用户非法发送ajax请求?我可以使用哪种服务器端验证?

//front end
$http.post('/api/users/updatepoints', {
  kidId: xxx,
  pointsChanged: yyy
})

//backend
exports.updatePoints = function(req, res) {
  var kidId = req.body.kidId,
    pointsChanged = req.body.pointsChanged;

  User.findOne({_id: kidId}, function(err, user) {
    if (err) return res.send(400);
    user.points += pointsChanged;
    user.save(function(err) {
      if (err) return res.send(400);
      return res.send(200)
    });
  })
}

1 个答案:

答案 0 :(得分:1)

简单的答案是"你不能"。

一个充分确定的黑客将始终能够控制您在计算机上运行的任何内容。避免这种情况的唯一方法是验证服务器端的所有内容。

例如,击败"映射黑客的唯一方法"在竞争性在线游戏中,除非向用户显示该信息,否则永远不会向客户发送信息。

如果它很重要,请在服务器端执行。让客户端进行处理并验证并验证它发送给您的所有内容。

这是一个太大的主题,不能以这样的格式进行适当的讨论。尝试进行一些互联网搜索,以防止游戏中的客户端黑客攻击。