使用nodejs创建websocket服务是非常简单的(”ws”模块等),网上教程也很多。websocket服务默认没有连接验证,再加上它支持跨域连接,这样就存在“盗连”和并发攻击的风险。
nodejs的”ws”模块提供了一个verifyClient回调方法,可以在客户端连接时,获取到连接信息如url等。这样我们就可以在连接url中加入自己的验证信息(用户名、密码等)。直接上代码:
************************************************************
后端:MyWs.js
var util = require('util');
var url = require('url');
var server = require('ws').Server;
var wss = new server({ port: 8181,verifyClient: ClientVerify });
wss.on('connection', function (ws){
console.log('client connected');
ws.on('message', function (message) {
ws.send("message received!");
});
ws.on('close', function (close) {
console.log("client closed");
});
});
//验证函数
function ClientVerify(info) {
var ret = false;//拒绝
var params = url.parse(info.req.url, true).query;
if (params["id"] == "luoc83" &¶ms["key"] == "123456") {
ret = true;//通过
}
return ret;
}
************************************************************
前端:MyWs.htm
var ws;
varuser = "luoc83";
varpsw="12345";//现在是错误密码,正确的是“123456”
function Connect() {
ws = newWebSocket("ws://localhost:8181?id="+user+"&key="+psw);
ws.onopen = function (e) {
alert("connectsuccess");
}
ws.onclose = function () {
alert("close");
}
ws.onerror = function (e) {
alert("connecterror!");
};
ws.onmessage = function (event) {
alert(event.data);
};
}