Socket.io避免垃圾邮件/漏洞攻击

Socket.io避免垃圾邮件/漏洞攻击,socket.io,spam,exploit,Socket.io,Spam,Exploit,我有一个socket.io服务器,用于聊天和在网站上实时显示信息。用户可以在站点上使用点 我想给他们一个/send命令,让他们给朋友打分。我这样做: if (msg.substr(0,6) === '/send ') { msg = msg.substr(6); var ind = msg.indexOf(' '); if (ind !== -1) { var receiverID = msg.substr(0, ind); var amo

我有一个socket.io服务器,用于聊天和在网站上实时显示信息。用户可以在站点上使用点 我想给他们一个/send命令,让他们给朋友打分。我这样做:

if (msg.substr(0,6) === '/send ') {
    msg = msg.substr(6);
    var ind = msg.indexOf(' ');
    if (ind !== -1) {
        var receiverID = msg.substr(0, ind);
        var amount = msg.substr(ind + 1);
        if (amount <= 0) {
            socket.emit('chat error', 'Error! The amount should be greater than 0!');
            return;
        }
        if (row[0].pontos < amount) {
            socket.emit('chat error', 'Error! You don\'t have this amount of points');
            return;
        }
        if (isNaN(amount)){
            socket.emit('chat error', 'Error! Syntax: /send userid amount');
            return;
        }
        connection.query('SELECT * FROM `users` WHERE `steamid`=\'' + receiverID + '\'', function(err35, row35, fields35) {
            if (err35) throw err35;
            if (row35.length == 0) {
                socket.emit('chat error', 'Error! You are trying to send coins to an unregistered user!');
                return;
            }
            var receiverSecret = row35[0].secret;
            if (receiverSecret == row[0].secret) {
                socket.emit('chat error', 'Error! What\'s the point of sending points to yourself?');
                return;
            }
        connection.query('UPDATE `users` SET `pontos`=`pontos`-\'' + amount + '\' WHERE `secret`=\''+row[0].secret+'\'', function(err350,     row350, fields350) {
                if (err350) throw err350;
            connection.query('UPDATE `users` SET `pontos`=`pontos`+\'' + amount + '\' WHERE `secret`=\''+receiverSecret+'\'', function(    err3500, row3500, fields3500) {
                    if (err3500) throw err3500;
                    updatePoints();
                });

            });
            clients[row[0].secret].emit('chat success', 'You\'ve sent '+amount+' points to '+row35[0].nome);
            if (receiverSecret in clients) {
                clients[receiverSecret].emit('chat success', 'You\'ve received '+amount+' points from '+row[0].nome);
            }
        });   
    }else{
        socket.emit('chat error', 'Invalid user id! Format: \'/send <userid> <amount>\'');
    }
}
if(msg.substr(0,6)='/send'){
msg=msg.substr(6);
var ind=msg.indexOf(“”);
如果(ind!=-1){
var receiverID=msg.substr(0,ind);
var金额=msg.substr(ind+1);

如果(您需要检查用户的可用点数是否超过执行一次/发送所需的点数,这可能是许多其他选项中的一个……正如您在我在问题中发布的代码中所看到的,我已经检查过了,但当发送垃圾邮件时,mysql查询无法足够快地运行以响应这些命令。您正在执行一个命令。)非阻塞并排进行,您应该首先检查它,然后在回调中进行更新。您的意思是,如果我在node.js的points中放入
else
query(){}
second\u query(){}
是并行执行的,如果不是嵌套的,那么当您在回调中得到结果时,
query({},函数(err,data){})
您需要从该函数内部执行第二次查询,以确保已完成第一次查询,然后继续第二次查询。您需要检查用户的可用点数是否超过执行一次/发送所需的点数,这可能是许多其他选项中的一个……正如我在问题,我已经检查过了,但是当发送垃圾邮件时,mysql查询的运行速度不够快,无法响应这些命令。如果您并排执行非阻塞操作,您应该首先检查它,然后在回调中进行更新。您的意思是,如果我在node.js的点中放置
else
,则
query(){}
second_query(){}
如果没有嵌套,则并行执行,因此当您在回调中获得结果时,
query({},function(err,data){})
您需要从该函数内部执行第二次查询,以确保完成第一次查询,然后继续第二次查询。