对于我的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)
});
})
}
答案 0 :(得分:1)
简单的答案是"你不能"。
一个充分确定的黑客将始终能够控制您在计算机上运行的任何内容。避免这种情况的唯一方法是验证服务器端的所有内容。
例如,击败"映射黑客的唯一方法"在竞争性在线游戏中,除非向用户显示该信息,否则永远不会向客户发送信息。
如果它很重要,请在服务器端执行。让客户端进行处理并验证并验证它发送给您的所有内容。
这是一个太大的主题,不能以这样的格式进行适当的讨论。尝试进行一些互联网搜索,以防止游戏中的客户端黑客攻击。