微信消息的验证

微信公众号开发中,微信平台向第三方服务器转发的消息,在处理之前,是应该进行校验的。这一点,稍有安全常识的开发者都应该能意识到。然而,微信公众平台的接入指南中,只提到了一开始验证服务器时对 GET 请求的验证,而对 POST 请求的验证却只字不提,导致网上很多微信公众号开发的入门教程都忽略了这一点。微信平台向第三方服务器转发用户消息,都是以 POST 请求的方式进行的,如果不进行校验,可能被伪造(其实根本都不需要伪造好么)成微信平台的消息攻击。

微信公众平台的接入指南提到,GET 请求的校验,需要 tokentimestampnoncesignature,若

signature == sha1(sort(token, timestamp, nonce)) #这是伪代码

即为校验成功。其中 token 是开发者自己配置的,timestampnoncesignature 是 URL 中携带过来的。校验算法可以自己实现,也可以用网上现成的代码,如 wechat_sdk 的 check_signature() 函数。Django 开发中,从 GET 请求的 URL 中获取后三个参数,可以用如下方法(以 signature 为例):

signature = request.GET.get('signature', None)

很多教程讲到这里就结束了,并不提 POST 请求如何验证,或者用了很繁琐的方法(如 WSGI)去提取 URL 中的参数。其实大可不必,POST 请求跟 GET 请求的验证方法完全一样,提取参数也是使用同样的语句:

signature = request.GET.get('signature', None)

注意了,虽然这是一条 POST 报文,但要从 URL 中提取 query string,还是得用 GET。就是这样。但是千万记得,一定要进行验证。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 微信服务号开发 整体流程 域名报备,服务器搭建 Python开发环境和项目的初始化搭建; 微信公众号注册及开发模式...
    飞行员suke阅读 10,054评论 0 14
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • 首先进入微信公众号的开发者中心,找到服务器配置如下图: ![](http://ou8xokgeo.bkt.clou...
    意浅离殇阅读 4,594评论 0 0
  • 开发前首先我们要知道一些概念 各公众号区别:1、订阅号:为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(...
    CoderZS阅读 8,743评论 1 19
  • 在社会的大舞台上,一场名为“读书是否有用”的辩论赛正激烈的进行。这个名为社会的舞台足够大,大到正反两方都能提供足够...
    言小海阅读 4,328评论 3 9

友情链接更多精彩内容