使用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. 10-排序6 Sort with Swap(0, i) (25 分)

    Given any permutation of the numbers {0, 1, 2,..., N−1}, it is easy to sort them in increasing order ...

  2. sofa-boot(1)helloworld项目

    本示例参考:https://www.sofastack.tech/sofa-boot/docs/QuickStart 示例采用sofa-boot 3.1.1版本. 如下步骤: 1.进入https:// ...

  3. vue(2)创建项目

    1.创建项目 cmd到自己指定目录下,执行 vue init webpack-simple hello-vue 2.安装项目依赖 cd hello-vue cnpm install 3.运行该项目,测 ...

  4. 图像数据转换成db(leveldb/lmdb)文件(转)

    参考网站:http://www.cnblogs.com/denny402/p/5082341.html 在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格 ...

  5. Problem08 输入数字求和

    题目:求s=a+aa+aaa+aaaa+aa...a 的值,其中a 是一个数字.例如2+22+222+2222+22222(此时共有5 个数相加),几个数相加有键盘控制. 程序分析:关键是计算出每一项 ...

  6. 1-----Scrapy框架整体的一个了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  7. Mysql 查看表数据以及索引大小

    如果想查看 Mysql 数据库的总的数据量或者某个表的数据或者索引大小,可以使用系统库 information_schema 来查询,这个系统库中有一个 TABLES 表,这个表是用来记录数据库中表的 ...

  8. 转 oracheck

    转 https://dbaplus.cn/news-10-220-1.html ORAchk 之前被称为RACcheck,后来它的检查范围进行了扩展,改名为了ORAchk,它是在数据库系统进行健康检查 ...

  9. 工作ui(2)

    做完整个小Demo整理的一些方法和踩过的miniUI的坑,分享出来希望大家批评指正,共同进步. 1.动态创建列:尽量不要直接在html文件里创建列,动态设置在js文件里方面添加.修改等. 首先把列定义 ...

  10. 工作中常用到的sql命令!!!

    一.mysql数据库日常操作.     1.启动mysql:/etc/init.d/mysql start (前面为mysql的安装路径)     2.重启mysql:  /etc/init.d/my ...