微信用别人的开发者接口安全吗?接入认证的方式

9158APP 0

微信用别人的开发者接口安全吗?接入认证的方式

在开发微信小程序时,很多人都需要接口进入,但是很多朋友都担心这些接口的安全性。使用别人的界面真的安全吗?下面小编就来给大家详细讲述一下这些事情。让我们看看它是否安全。如果您觉得我说的有道理,请给我点个赞吧!

根据微信提供的消息接口指南,微信公众平台分为接入和使用两个步骤。官方的接入程序提供了一个简单的例子。我们回顾一下访问认证方式:

提交接入申请后,微信公众平台将向接口地址发起接口认证请求,使用GET方法,携带以下参数:

参数说明

签名微信加密签名

时间戳时间戳

随机数

echostr 随机字符串

接入申请到达后,接口需要验证签名的有效性。验证通过后,echostr参数将原样输出并返回微信平台。对于签名生成规则,有以下定义:

360截图20180107192843255.jpg

加密/验证过程:

1.将token、timestamp、nonce这三个参数按字典顺序排序

2、将三个参数字符串拼接成一个字符串进行SHA1加密

3. 开发者获得的加密字符串与签名进行比对,可以识别该请求来自微信。

这里需要注意官方消息接口指南中的一个遗漏,即没有提示任何请求都必须验证签名。一些开发人员可能忽略了这个细节,在没有验证签名的情况下处理了请求。这需要额外注意。

但是,这并不意味着签名验证通过了,请求就是安全的。重现攻击的方法如下:——拦截(或通过访问日志泄露)来自微信服务器和接口服务器的请求,泄露某些请求参数。如果只是按照上面的方法验证签名,这意味着任何请求的参数在未来的任何时候都是有效的。

为了防止签名被重复使用,我们可以采取以下两个预防措施:

检查时间戳有效性。由于服务器之间存在时间差,时间戳只需在一个窗口时间范围内有效。

签名可防止重复使用。由于两个请求生成相同签名的几率很小,所以我们只需要暂时屏蔽使用过的签名即可。这可能需要K-V 缓存(例如memcache)的帮助。屏蔽时间可以略大于上面的时间戳窗口时间。

然而,这并不足以保证消息的完全安全,因为上述方法无法防止“中间人攻击”。

什么是“中间人攻击”?例如,恶意第三方在客户端和服务器之间的通信中添加了透明代理,而他们并不知道这个代理的存在。因此,该代理可以秘密获取通信数据,甚至篡改数据。针对SSL 通信协议的中间人攻击更为常见。

由于SSL通信链路的加密,第三方无法直接访问数据解密。通过中间人攻击,SSL 访问被透明代理(中间人也持有合法的SSL 证书),加密通信在无人察觉的情况下受到监控。我还要提醒大家的是,即使使用HTTPS访问互联网,也可能并不完全安全。您还需要仔细验证服务器的证书信息是否与预期一致。当然,双向证书模式认证可以避免这种攻击风险。

上面的说法有点扯远了。由于签名生成不包含消息信息,即使签名正确,也不能保证通信消息没有被篡改。为了一定程度上解决这个问题,请严格验证微信消息请求中的CreateTime字段和时间戳字段是否在合理的时间窗口内。这可以降低消息篡改攻击的风险,但不能完全消除。

可见,微信公众平台消息接入只适合那些非保密的消息。实际使用中,也建议只进行非敏感信息查询等业务。

所以,对于一般的开发,也就是一般的信息来说,连接到别人的接口上是没有关系的。如果是那种私人信息,就需要谨慎,所以我觉得大家在面对这个问题的时候一定要小心。首先要考虑的是你要开发的内容的安全级别是多少!