防止来自客户端的垃圾邮件异步API调用?

时间:2014-07-08 11:28:22

标签: node.js asynchronous express

我正在创建一个小型多人游戏,玩家可以购买卡片。

在购买卡方法中,我正在做一系列异步请求,检查用户是否有足够的余额,如果游戏还没有启动等等。

然而,当我在我的控制台中执行此操作时:

for(var i = 0; i < 100; i++) {
    $.post('api/card', {
        game: '53ac5694edd697072c801228'
    }, function (result) {
    console.log(result);
    });
}

用户可以绕过余额检查,因为当它仍在创建第一张卡时,第二个查询已经运行并确定余额仍为正数。

防止这种情况的最佳方法是什么?我正在使用Node.js和Express.js

1 个答案:

答案 0 :(得分:0)

首先:如果他们可以确定余额仍然是正数,那么您的请求处理程序会执行不在事务中的事务(查询)。这是第一个也是最大的问题。修复此问题在服务器端。如果您使用的是SQL数据库,那么这将很容易。如果您使用的是非SQL数据库,那么由于您必须手动实现事务,因此很难。

其次:在完成第一个请求之前,您可以简单地禁止用户发出第二个请求。这可以通过在会话中保留布尔标志并且如果它是错误的响应(例如409 Conflict)来轻松完成。但这样做只是为了提高性能/用户体验。交易更重要。

相关问题