使用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",说明验证成功。

使用nodejs创建加入用户验证的websocket服务的更多相关文章

  1. linux系统下mysql跳过密码验证登录和创建新用户

    修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 例如: [mysqld] datadir=/var/lib/mysq ...

  2. jsp servlet 进行基于js的用户验证

    写这个只是完成使用js文件参数进行用户验证的处理的jsp 版,已经写过 asp.net php nodejs 以及纯js的,现在完善jsp的 使用的技术是比较简单的就是站点应用我们的js脚本,但是是带 ...

  3. nodejs搭建简单的websocket服务端

    创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...

  4. Nodejs创建HTTPS服务器

    Nodejs创建HTTPS服务器 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Jav ...

  5. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

    SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办? 想起来之前着急哥问我的一个问 ...

  6. 来玩Play框架06 用户验证

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 用户验证(User Authentification)复合的使用Play框架的数个 ...

  7. mongdb3.0用户验证问题

    1.  用户验证方式更改: Mongodb2.6的默认用户验证方式是:MONGODB-CR Mongodb3.0的默认用户验证方式是:SCRAM-SHA-1 因为新的验证方式在spring和java中 ...

  8. Oracle创建删除用户,角色,表空间,导入导出数据库命令总结(转载)

    无意间看到一篇文章,觉得对于ORACLE的新手很实用,特转载,原文出处这里 说明:在创建数据库时输入的密码,是修改系统默认的密码,以system和sysman等系统默认身份登录时要输入的密码就是修改后 ...

  9. [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室

    原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...

随机推荐

  1. N - 嘤嘤嘤 (并查集+枚举)

    Our lovely KK has a difficult Social problem. A big earthquake happened in his area. N(2≤N≤2000)N(2≤ ...

  2. connecting-to-github-with-ssh

    https://help.github.com/articles/connecting-to-github-with-ssh/ 创建ssh密钥后,从github clone仓库到本地出现permiss ...

  3. zookeeper崩溃修复

    cat /etc/zookeeper/conf/zoo.cfg 找到dataDir=/var/lib/zookeeper 切换到路径/var/lib/zookeeper cd /var/lib/zoo ...

  4. vue(3)IDE

    使用vscode,下载:https://code.visualstudio.com/Download 1.安装vscode 2.安装插件 方式一:https://marketplace.visuals ...

  5. PHP、thinkPHP5.0开发网站文件管理功能(二)删除文件

    1.is_dir():检查指定的文件是否是目录 2.scandir():返回指定目录中的文件和目录数组 3.unlink():删除文件,如果删除的文件不存在会报错,加@抑制报错 public func ...

  6. my.宠物价格_资料

    1.梦幻西游手游宠物估价五大实用技巧_72G梦幻西游手游专区.html http://www.72g.com/game/mhxysy/88470.html 梦幻西游手游宠物估价五大实用技巧 作者:升仙 ...

  7. sqoop导入数据

    来源https://www.cnblogs.com/qingyunzong/p/8807252.html 一.概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据 ...

  8. Smaug Coverage

  9. 网页URLs

    Extending Python Interpretor: https://docs.python.org/3/extending/index.html Aliyun Mriirors: https: ...

  10. Qmake 配置自定义编译过程

    Qmake 配置自定义编译过程 需求:动态更换资源文件 在 Windows10 下编写 Qt 项目时,有这样的需求: 程序用到的资源文件可以动态更换而不需要重新编译整个项目 解决方案 0.1 将所有的 ...