我有一个带socket.io的node.js服务器.我的客户端使用socket.io连接到node.js服务器.
数据以下列方式从客户端传输到服务器:
在客户端
var Data = {'data1':'somedata1', 'data2':'somedata2'};
socket.emit('SendToServer', Data);
Run Code Online (Sandbox Code Playgroud)
在服务器上
socket.on('SendToServer', function(Data) {
for (var key in Data) {
// Do some work with Data[key]
}
});
Run Code Online (Sandbox Code Playgroud)
假设某人修改了他的客户端并向服务器发送了大量数据.例如:
var Data = {'data1':'somedata1', 'data2':'somedata2', ...and so on until he reach for example 'data100000':'data100000'};
socket.emit('SendToServer', Data);
Run Code Online (Sandbox Code Playgroud)
因为服务器上的这个循环......
for (var key in Data) {
// Do some work with Data[key]
}
Run Code Online (Sandbox Code Playgroud)
...服务器需要很长时间才能遍历所有这些数据.
那么,防止此类情况的最佳解决方案是什么?
谢谢
编辑:
我用这个函数来验证对象:
function ValidateObject(obj) {
var i = 0;
for(var key in obj) {
i++;
if (i > …Run Code Online (Sandbox Code Playgroud) 我想在握手对象中保存一些用户敏感数据.服务器端代码看起来像这样:
io.configure(function (){
io.set('authorization', function (handshakeData, callback) {
var objAuthorized = IsUserAuthorized(handshakeData);
if (objAuthorized.authorized) {
handshakeData.password = objAuthorized.password; // Store sensitive data inside handshake
handshakeData.email = objAuthorized.email; // Store sensitive data inside handshake
callback(null, true);
} else {
callback(null, false);
}
});
});
io.sockets.on('connection', function (socket) {
socket.on('do something', function() {
if DoSomething(socket.handshake.password, socket.handshake.email) {
// do something here
}
});
});
Run Code Online (Sandbox Code Playgroud)
上面的例子来自https://github.com/LearnBoost/socket.io/wiki/Authorizing.
在握手对象中保存敏感数据是否安全?客户端可以在套接字连接的生命周期内以某种方式修改此数据吗?
谢谢