尽管处理微信请求的服务器,处于微信服务器的后端,但是安全问题依然不可小觑。
大概总结以下几个方面,希望引起注意。
一、设置高复杂度的Token,尽量隐藏服务地址URL
URL:即为处理微信请求的链接地址
Token:用户身份凭证
申请成为开发者或者修改URL\Token时,微信会通过Get请求访问URL,验证签名,其中需要Token。
过程相当于一次握手,如果握手成功,可进行后续的通信。
成为开发者后,我们也可以进行修改
面临的危险:
1、如URL和Token被破解,直接链接到其他公众账号,直接可以盗用服务。当然对于一些广告类型账号而言,这样无利可图。但是,如果是提供某种应用或者服务的公众账号,免费给其他账号提供服务,势必增加服务端压力,带来一定的风险。
2、如果URL被破解,即使token没被破解。一些不法分子,可能对该URL进行攻击,当然枪打出头鸟,想被黑客盯上也不没那么容易。呵呵
建议:
1、尽量保证服务的URL,与提供消息或者网页没有直接关系。以防止,根据URL推算得出服务URL。
2、可以使用URL重定向,将一些路径信息进行隐藏。
3、在服务中判定请求的来源,是否是微信服务器来的请求。这个可以根据请求的URL来进行判定,对于其他请求不予处理。
4、Token值,尽量复杂一些。
二、建议每次请求,都进行签名验证
在设置URL或token后,微信都会提交get请求,来访问我们后端服务。验证通过之后,微信其他请求都是通过POST方式提交。
所以在代码中,我们常常会根据请求的方式来判断是否进行签名验证。在之前的例子中,也曾这么用:
/// <summary>
/// 处理请求,产生响应
/// </summary>
/// <returns></returns>
public string Response()
{
string method = Request.HttpMethod.ToUpper();
//验证签名
if (method == "GET")
{
if (CheckSignature())
{
return Request.QueryString[ECHOSTR];
}
else
{
return "error";
}
}
//处理消息
if (method == "POST")
{
return ResponseMsg();
}
return "无法处理";
}
尽管微信其他请求是以POST提交的,但是其URL中同样携带了签名信息,我们同样需要进行签名认证。所以为了安全起见,建议每次请求都进行签名认证。
根据这个原理,我们将代码修改如下:
/// <summary>
/// 处理请求,产生响应
/// </summary>
/// <returns></returns>
public string Response()
{
string method = Request.HttpMethod.ToUpper();
//验证签名
if (method == "GET")
{
if (CheckSignature())
{
return Request.QueryString[ECHOSTR];
}
else
{
return "error";
}
}
//处理消息
if (method == "POST")
{
//验证签名
if (CheckSignature())
{
return ResponseMsg();
}
}
return "无法处理";
}
签名算法CheckSignature(),这里不再赘述,具体可见:微信公众账号开发教程(二) 基础框架搭建
三、可以根据ToUserName验证请求
通常我们的公众账号都对应一个openId,在处理消息时可以获得。这个openId是固定的,可以根据其判定发送者的身份信息。这种方式,可以很好的过滤无效消息或者欺骗,只有发给我的消息,我才处理。即使URL和Token被人破解,也同样能够保证后端服务,只为我们的公众账号提供服务。
/// <summary>
/// 是否是发给我的呢
/// </summary>
/// <param name="toUserName">接受者</param>
/// <returns>bool</returns>
private bool IsSentToMe(string toUserName)
{
return string.Equals(toUserName,Context.OpenID,StringComparison.OrdinalIgnoreCase);
}
四、AppId和AppSecret
如果是服务号,还有一些高级功能,而这些高级功能需要开发者凭据:AppId和AppSecret。
根据AppId和AppSecret可以获得ACCESS_TOKEN,根据ACCESS_TOKEN就可以管理高级功能了,比如:自定义菜单。
ACESS_TOKEN有过期时间,通常为7200S。但是AppId和AppSecret是系统随机生成的,无过期时间,如果需要修改,需要登录微信公众账号管理平台进行重置。
获取Access_Token方式,通过Get请求如下URL
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxx&secret=xxxx.
获取Access_Token后,就可以操作一些高级接口
比如:
创建自定义菜单,是通过http请求方式:POST(请使用https协议)
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
具体实现,见:微信公众账号开发教程(四)自定义菜单
ACCESS_TOKEN是通过get方法获得的,其实不太安全,如果被人窃取,其可以修改自定义菜单的链接,可以将其改为一些广告链接,或者更邪恶的链接,你这服务器直接成了人家的肉机。所以一定要保证服务器的安全。为了安全起见,建议隔一段时间重置AppId和AppSecret(微信公众平台的后台服务页面)。重要的还是要保证允许服务器的安全,具体可以见五。
五、保证服务器的安全
服务器安全要素很多,比如:保证网络安全、设置防火墙、安装杀毒软件、限制一些端口等等,这跟我们平时服务器安全要求一样,这方面资料很多,这里不再赘述。
分享到:
相关推荐
微信公众平台开发入门教程
微信公众平台的开发教程,用Java写的,挺有借鉴的意义
微信公众平台开发教程Java版 微信公众平台开发教程Java版
微信公众平台开发教程,适合初学者了解入门,用的是php语言,简单易懂,欢迎下载
微信开发实例 微信公众平台开发教程-深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)1.微信接口前期准备。由北风网提供,微信开发实例微信公众平台基础篇: 1)微信公众平台简介:开发...
微信公众平台应用开发实战-完整扫描版 pdf 版本。 微信公众平台应用开发实战-完整扫描版 pdf 文档。 微信公众平台应用开发实战-完整扫描版.pdf 全书一共9章,在逻辑上分为四大部分:第一部分(第1章)介绍了微信公众...
微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,用户通过简单的设置,就能生成微信3G网站。通过微信公众平台将企业品牌展示给微信用户,减少宣传成本,建立企业与消费者、...
一直找不到一套整体的微信公众开发教学视频,今天给大家分享孔浩老师 一整套微信公众平台开发的视频教程,后台是用java语言写的。真心好东西,还有源码哦。
内容简介: 本视频由《微信公众平台应用开发:方法、技巧与案例》的作者刘运强(网名:柳峰)讲解微信公众平台开发入门级相关知识的系列视频之一。内容涵盖:1.微信公众平台基础知识(服务号/订阅号、公众账号注册的...
PHP微信公众平台开发,内容丰富,涵盖了多个PHP微信公众平台开发的方面,适合于初学者来学习借鉴。
微信公众平台开发入门教程上.pptx
2. 微信公众帐号开发教程第2篇-微信公众帐号的类型(普通和会议) 3. 微信公众帐号开发教程第3篇-开发模式启用及接口配置 . 微信公众帐号开发教程第5篇-各种消息的接收与响应 6. 微信公众帐号开发教程第6篇-文本...
微信公众平台开发教程PHP版,可以作为微信二次开发的基础教程。
微信公众平台开发教程之新手初级入门攻略 附PHP代码实例
《微信公众平台开发教程(java版本含代码)》,有书签。
本书是微信公众平台应用开发领域的经典著作,作者是腾讯公司的资深软件开发工程师,而且是微信公众平台应用开发的先驱者之一。本书全面介绍了微信公众平台应用开发所需的各项技术,系统解读了微信公众平台开放的API...
微信公众平台开发视频教程!微信公众平台开发视频教程!微信公众平台开发视频教程!
[027] 微信公众帐号开发教程第3篇-开发模式启用及接口配置 - 柳峰的专栏 - 博客频道 - CSDN.NET [035] 微信公众帐号开发教程第11篇-符号表情的发送(上) - 柳峰的专栏 - 博客频道 - CSDN.NET [036] 微信公众帐号...
微信公众平台开发教程,适合初学者了解入门,用的是php语言,简单易懂,欢迎下载