aardio的jsonRpc服务端防止被扫描崩溃的办法_电脑计算机编程入门教程自学

Admin Admin
发布:2018-11-04 08:45:02 分类:心得经验
aardio的jsonRpc服务端是比较简单好用的,在项目上线的过程中发现会有被人扫描端口收到乱码请求的情况,导致jsonRpc服务端RAW错误而崩溃,比如这样的:
---------------------------
RAW CALLBACK ERROR
---------------------------

{File}:~lib\win\ui\_.aardio
{Line}:#291
{Error}:
{File}:~lib\web\socket\server.aardio
{Line}:#204
{Error}:
{Calling}:'push'
{Bad argument}:@1
'
{Expected}:table
{Got}:buffer'
---------------------------
确定   
---------------------------
通过查看标准库web.socket.server的源代码,发现client.cacheFragment.data预期为table,实际获取到buffer时会崩溃,是client.cacheFragment.data = buffer;这一句把它设置为buffer的.所以可以尝试的解决办法有以下.

第1种,添加一行,判断client.cacheFragment.data的类型是不是table,不是就返回
if(type(client.cacheFragment.data != "table")){return ; }
..table.push(client.cacheFragment.data,msg.data);
client.cacheFragment.length = client.cacheFragment.length + #(msg.data);
这种改法的好处是只需要重新发布服务端即可,不需要修改客户端升级.

第2种,要修改客户端,在客户端上添加一个请求头,然后在服务端上判断这个请求头,过滤掉非客户端发来的请求

//可以在客户端添加特定的请求头,也可以修改ua,然后服务端判断,不对就关闭返回
this.httpServer.onUpgradeProtocol = function(client,request,response){
    //添加的这段,判断请求头里有没有特定的项,没有此项就说明不是客户端发来的,防止遇到别人扫描发来的请求造成错误
    //import console;
    //console.varDump(request.headers["client-from"])
    //判断添加特定的请求头是否正确
    if(request.headers["client-from"] != "jianma-soft-client"){
    console.log("别扫描,不处理的")
        response.errorStatus(400);
        response.close(true);
        return ; 
}

然后客户端里添加请求头项:

//添加请求头项,让服务端识别,不处理别的扫描发来的无此请求头项的请求
ws.rpc.headers = {
    ["client-from"] = "jianma-soft-client"; 
}

这种改法的好处是通俗易懂,缺点是如果已经发布了客户端,则要重新发布升级客户端,有些已经上线的项目不好升级.

用示例中的服务端和客户端测试成功.
[ 发单/接单 ]
换IP投票软件
PC蛋蛋自动挂机投注
新浪微博发微博显示尾巴的方法,比如显示来自iphone 7
百度文库批量自动上传软件
一点资讯app刷阅读量/评论/收藏/订阅功能/手机号注册
定做一个阿迪达斯官网注册器(需要破点击文字式验证码)
定制人人网自动注册/修改资料/采集/私聊软件
酷狗繁星直播网页协yi
YY多功能刷订阅刷粉丝
滑块验证码本地识别
[ 站内搜索 ]
[ 最近热帖 ]
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 1854
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 1844
aardio调用nodejs的ws模块做一个简单的聊天通信示例 1842
通过chrome.dll中间件控制外部chrome浏览器 1714
乐玩插件AARDIO调用 1679
Aardio文本编辑框控件edit_返回父窗口对象和改变父窗口对象 1677
用aardio创建web工程图文讲解(1) 1617
万能助手入门帮助教程:学会科学地管理工作文件 1598
Aardio文本编辑框控件edit_限制字符数 1486
分享超级无敌好用的JS编辑器visual studio code 1467
分享一个刚写的aar代码格式化工具源码 1397
Aardio文本编辑框控件edit_修改字体颜色数值和获取字体颜色数值 1252
Aardio文本编辑框控件edit_是否只读禁止编辑 1125
求教大佬,aardio怎么抓https数据包 1115
Aardio文本编辑框控件edit_取控件所在的父窗口对象 1082
[ 近期热答 ]
编程入门教程:aardio批量上传文件并显示进度条 1
万能助手入门帮助教程:自定义用户名 1
kio,这么干会不会被封杀? 2
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 1
万能助手入门帮助教程:拖拽调整节点位置[动图] 1
电脑计算机编程入门教程自学:使用百度地图API接口分页获取信息 1
【提问】万能助手界面怎么调节文字大小 2
头疼的小问题,关于助手 3
万能助手账户登录不上 3
万能助手 -- 扩展库大全集 4
万能助手 -- 最好用的桌面图标快捷方式管理工具 下载 8
求教:json提取出某一内容 1
像这样调整控件大小是怎么实现的? 2
请教aardio的文本框取数据库中的16进制数据(汉字)是乱码 2
制作GIF录制工具遇到的问题 1