From 5cc8e3c576c7342f16fcd15fff2237bfcf670e4d Mon Sep 17 00:00:00 2001 From: wanganxp Date: Thu, 11 Aug 2022 06:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=89=E5=85=A8=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/uniCloud/secret-net.md | 125 +++++++++++++++++++----------------- 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/docs/uniCloud/secret-net.md b/docs/uniCloud/secret-net.md index 2e54ca21f..3777255c1 100644 --- a/docs/uniCloud/secret-net.md +++ b/docs/uniCloud/secret-net.md @@ -1,74 +1,47 @@ -# uniCloud 加密网络通道 +云端一体安全网络 -简介 +## 简介 -为了避免 `uni-app` 和 `uniCloud` 通信时数据被截取和篡改 +网络安全的问题很多: +1. 客户端受信。因为过去采用无状态网络通过接口交换数据,客户端的真实性很难保证。 +2. 网络抓包,即便是https的请求也会被抓包。 -**平台差异说明** - -|App|微信小程序| -|:-:|:-:| -|后续支持|3.5.5+| +当攻击者了解了你的服务器接收什么样的数据时,就可以冒名客户端,提交假数据来攻击你的服务器。 +尤其当你的业务中涉及促销、返佣、激励视频等场景,非常容易被刷。褥羊毛已经是一个非常成熟的灰产。 -## callFunction - -```js -uniCloud.callFunction({ - name: 'collection', - data: { - name: 'user' - }, - secret: 'both' -}) -``` +当DCloud同时提供了`uni-app` 和 `uniCloud`时,事实上具备了提供云端一体的安全网络的能力。 +在HBuilderX xx+ ,当开发者同时使用 `uni-app` 和 `uniCloud` 时,可以在网络请求时选择是否通过安全网络运行,它通过高安全的保护机制,防止客户端伪造和通信内容抓包。 -## 云对象 +注意:安全网络不支持web平台,只支持微信小程序和App。并且App的安全级别更高。 -```js -uniCloud.importObject('object-name', { - customUI: false, - secret: 'both', - secretMethods: ['login'] -}) -``` - - -`secret` 属性说明 - -|值 |描述 | -|:-: |:-: | -|none |不加密,默认值 | -|request |客户端请求时加密数据,服务器下发数据时不加密 | -|response |客户端请求时不加密数据,服务器下发数据时加密 | -|both |客户端和服务器同时加密数据 | - -`secretMethods` 需要加密的方法名 - - -## 依赖uniCloud模块 +**平台差异说明** -- `uni-id-co` [详情]() -- `uni-open-bridge` [详情]() +|App|微信小程序| +|:-:|:-:| +|后续支持|3.5.5+| +## 开通流程 -## App平台 +### App平台 后续支持 +### 微信小程序 -## 微信小程序 +1. 下载uni-id插件 -在微信小程序上依赖 `access_token`、`session_key`, `encrypt_key` +- `uni-id-co` [详情]() +2. 下载uni-open-bridge插件 -### 流程如下 +在微信小程序上依赖 `access_token`、`session_key`, `encrypt_key`。这些凭据需要`uni-open-bridge`统一接管。 -1. 使用 `uni-open-bridge`、`uni-open-bridge-common` 接管三方开放平台数据,[详情](/uniCloud/uni-open-bridge) +- `uni-open-bridge` [详情]() -2. 在应用的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆 +3. 在微信小程序的生命周期 `onLaunch` 中检查微信登陆状态,如果过期需要登陆 注意 `uni.checkSession` 有调用次数限制警告,一个 `pv` 可调用 `2` 次 @@ -99,17 +72,53 @@ uniCloud.importObject('object-name', { ``` -3. 调用 `uniCloud.callFunction()` 或 `uniCloud.importObject` -客户端内部逻辑如下: +## 调用方式 -1. 调用 `uniCloud.getCurrentUserInfo()` 检查本地 `uni-id` 用户登陆状态,登陆无效则调用 `uni.login()`,继续使用 `uni-id-co` 调用 `loginByWeixin({ code })`,此过程将同步更新 `uni-open-bridge-common` 保存的数据 `session_key` -2. 调用 `uni.getUserCryptoManager()` 获取加密密钥并通过 `AES` 加密数据,然后发送到 `uniCloud` 服务器 -3. 等待服务器响应加密数据到达客户端后解密,回调给开发者 +开通配置后,在uni-app客户端调用uniCloud服务器时,可以通过加入secret参数来声明这次请求走安全网络,对传输数据加密。 +- callFunction -## 小贴士 +客户端通过callFunction调用云函数时,加入secret参数。 +```js +uniCloud.callFunction({ + name: 'collection', + data: { + name: 'user' + }, + secret: 'both' +}) +``` -安全总是相对的 -安全网络是为了防止在设备上安装了受信任证书后 `https` 请求被抓包问题 +- 云对象 + +客户端通过importObject调用云对象时,加入secret和secretMethods参数。 + +```js +uniCloud.importObject('object-name', { + customUI: false, + secret: 'both', + secretMethods: ['login'] +}) +``` + + +**secret 属性说明** + +|值 |描述 | +|:-: |:-: | +|none |不加密,默认值 | +|request |只加密客户端请求时的上行数据,服务器下发数据不加密 | +|response |客户端请求时不加密数据,只加密服务器下发的数据 | +|both |客户端和服务器上行下行数据都加密数据 | + +**secretMethods 属性说明** + +`secretMethods` 是云对象中指定需要加密的方法名。因为云对象导入后,调用方法时没有额外指定的方式,所以集中在这里配置。如果不配置,则云对象的所有方法请求时都会加密。 + + +## 小贴士 + +1. 安全是相对的,没有绝对的安全。 +2. 安全是有代价的,加密的数据越庞大,加密和解密的耗时越长。 \ No newline at end of file -- GitLab