全网仿站服务商

仿站网站二次开发,低至500元,最快24小时内上线

咨询热线:18096623820

小程序安全设置

本节会对小程序各个层次的安全性进行分析,首先,以原生App为例。由于各家开发商自己的原生App都是基于智能机操作系统(iOS、Android等)进行搭建和开发的,所以代码实现、复杂程度、安全保障很难有一致性,在安全性上的表现也参差不齐,每个软件都可能有不同的安全防护和软件漏洞。但小程序基于微信软件生态,其使用的数据、接口大多来自微信,只需要直接调用微信官方接口使用数据就可以了,因此我们自己开发的小程序的安全性很大一部分依赖于小程序平台自身。很多针对原生App的攻击方法在这里都会遇到障碍,但也会导致一个结果,就是一旦小程序平台出现漏洞,那么这样的安全性漏洞可能波及所有可使用的小程序。也就是说,小程序的安全性大部分是相对统一的。


而就在小程序推出的当天,腾讯安全应急响应中心就在网站上对外界发布了英雄帖《微信小程序如约而至,安全需要你的守护》,宣布即日起到2017年1月20日,“重金”收集有关微信小程序的漏洞和威胁情报,如图10-1所示。由此可见,官方对小程序本身的安全性非常自信。所以,暂时就以腾讯公司本身的安全性技术保障来看,我们是可以放心的,即使一旦出了什么漏洞,相信官方也会在第一时间发布通知和解决问题。



那么在安全性方面,需要注意什么?或者说还能做些什么以在最大程度上保护安全呢?接下来,将会从数据安全、网络层传输、钓鱼风险等方面进行小程序安全性的讲解,同时,在相关的位置会提出一些开发者需要注意到的地方,以对开发出的小程序进行进一步的安全维护。


一、数据安全
由于微信小程序需要满足“即用即走”的特点,其数据在本地是以缓存的形式进行存储的。它将小程序运行中产生的数据以keylvalue的形式进行存储,直接保存在StorageDB缓存中。如果需要对小程序进行数据保护,可自行进行加密处理。可以以自己需要的加密方式进行数据加密,比如在将数据发送到服务器端之前进行MD5加密等。


在获取到数据后,还需要进行一些特殊处理。小程序中,页面的脚本逻辑是在JSCore中运行的,JSCore是一个没有窗口对象的环境,所以不能在脚本中使用window,也无法在脚本中操作组件。zeptoljquery 也无法使用,因为zeptoljquery会用到window对象和document对象,所以在微信小程序中不能使用jquery.md5.js对密码进行加密。可以将一些公共的代码抽离成一个单独的js文件,作为一个模块,模块只有通过module.exports或者exports 才能对外暴露接口,需要注意以下两点。

-exports是 module.exports 的一个引用,因此在模块中随意更改exports 的指向会造成未知的错误,所以更推荐开发者采用module.exports来暴露模块接口,除非你已经清晰知道这两者的关系。


小程序目前不支持直接引入node_modules,在开发者需要使用node_modules时,建议复制出相关的代码到小程序的目录中,以下代码可供参考。


// common.js


function sayHello(name) {


console.log("Hello ${name} !')


function sayGoodbye(name){console.log('Goodbye ${name} !'")
module.exports.sayHello = sayHelloexports.sayGoodbye = sayGoodbye


在需要使用这些模块的文件中,使用require (path)可将公共代码引入,代码如下:


var common = require('common.js')Page({


helloMINA: function() {


在需要使用这些模块的文件中,使用require (path)可将公共代码引入,代码如下:


var common = require('common.js')
Page({
helloMINA: function(){
common.sayHello('MINA')
},


goodbyeMlINA: function() {


common.sayGoodbye('MINA')
}
common.sayGoodbye('MINA')
}
})


仿照模块化方法,就可以进行各种自行编写算法的加密操作了。


二、网络安全


在网络安全方面,小程序支持发起通用请求、文件上传/下载、WebSocket通信机制。


首先,其HTTPS校验保证了网络传输的安全。通用request网络请求仅支持采用HTTPS,处理请求的接口位于com.tencent.mm.plugin.appbrand.g.c中,包含URL校验、域名校验、发起请求和处理响应结果。小程序的校验类似于浏览器,可通过其原生接口直接调用,证书校验的策略为校验公钥证书的根证书是否在合法CA列表凭证中,因此,自签名证书无法使用,这在一定程度上保证了网络的安全性。需要注意的是,针对特定终端设备,也是校验公钥证书的根证书是否在受信任的凭据中,所以在设备被恶意安装代理根证书的前提下,存在被中间人攻击的风险。


在URL连接和服务器方面,由后台配置小程序支持的域名,仅可访问已配置域名的URL,校验过程会将配置的域名先下载到本地,然后每次请求时,本地域名检查通过后才发起。对于其他的连接则不能访问。而对于通用request请求,平台会进行请求超时控制,当请求超过一定时间即会被中断(文件上传操作也有超时中断控制)。同时,使用小程序时也不可能通过外链URL跳转到别的网站,所以这方面存在的风险很小。


在下载文件时,小程序仅支持从含有已配置域名的URL中下载资源,而不是通过HTTP/HTTPS协议,这也保证了不会从其他网络或者服务器上下载一些不必要的东西,减少了恶意软件的存在。下载成功后临时存放,通过自定义协议wxFile进行访问,且映射到SD卡上的目录位置/sdcard/tencent/MicroMsg/wxafiles/wx_id/tmp_[hash_value]。上传文件也类似于下载文件,需上传至小程序合法域名下的服务器上,并保存临时文件在SD卡的文件存储区域。


三、存储安全


小程序运行的文件保存在SD卡的/sdcard/tencent/MicroMsglwxafiles/wx_id/目录下,通过自定义的wxFile协议指向SD卡目录下的文件。存放SD卡的文件会做完整性校验,无法被窜改。


首先,最终存储的文件名是对称加密(文件流内容Alder32校验和|原始文件名)生成的,最终文件名和文件内容会通过自校验判断完整性;其次,本地缓存是通过Hash映射查找文件,所以即使能破解文件名和文件内容,绕过文件自身签名校验,改为攻击者的伪造文件,小程序App也无法映射到该伪造文件进行使用。


四、开放接口安全
通过微信服务器推送的encryptData,可以获取到用户的相关信息,代码如下:
{
" openld " : "OPENID ",
"nickName " : " NICKNAME”,
" gender " : GENDER,
" city " : " CITY " ,
" province " : " PROVINCE"," country " : " COUNTRY "," avatarUrl " : ”AVATARURL"," unionld " : " UNIONID”," watermark " :
{
" appid " : " APPID”,
" timestamp ":TIMESTAMP
}


微信在接口方面做出了以下多种安全性保障。


首先,接口返回的明文数据会进行签名校验,需要依赖登录的session_key;接口返回的敏感数据会在加密之后进行返回,解密算法依赖登录的session_key,攻击者无法获知用户的session_key,窃取用户数据。此外,分享、客服消息、模板消息中输入的内容仅会以文本形式输出;模板消息会将数据通过HTTPS传输到服务器,而后推送到客户微信服务通知;微信支付功能直接继承微信平台原有的功能,安全性较为可靠。


同时,开放平台大部分功能会先通过wx.login获得code,然后使用该code换取openid,以此openid进行既定的微信功能操作,比如发送模板消息推送、发起微信支付等。这样,在操作过程中,我们使用的微信接口的安全性就可以得到一定的保障。














上一篇:小程序性能优化
下一篇:没有了

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。