使用nodejs创建加入用户验证的websocket服务

使用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" && params["key"] == "123456") {

        ret = true;//通过

    }

 

    return ret;  

}

 

************************************************************

前端:MyWs.htm

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <script type="text/javascript" language="javascript">

        var ws;

              var user = "luoc83";

              var psw="12345";//现在是错误密码,正确的是“123456”

        function Connect() {

            ws = new WebSocket("ws://localhost:8181?id="+user+"&key="+psw);

            ws.onopen = function (e) {

                            alert("connect success");

            }

 

            ws.onclose = function () {

                alert("close");

            }

 

            ws.onerror = function (e) {

                alert("connect error!");

            };

 

            ws.onmessage = function (event) {

                alert(event.data);

            };

        }

 

 

    </script>

</head>

<body >

<button onclick="Connect()">测试</button>

</body>

</html>

 

************************************************************

测试步骤:

1)启动后端服务:node MyWs.js

2)在浏览器打开MyWs.htm,点击“测试按钮”,弹出提示: "connect error!" 和 “close”

按“F12”可以看到提示信息:

WebSocket connection to 'ws://localhost:8181/?id=luoc831&key=123456' failed: HTTP Authentication failed; no valid credentials available

描述得很清楚:验证失败

3)修改MyWs.htm中 var psw="12345" 为 var psw="123456",保存,在浏览器打开,点击“测试按钮”,弹出提示"connect success",说明验证成功。

posted @ 2018-02-06 12:00  luoc83  阅读(1528)  评论(0编辑  收藏  举报