Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
31c87313
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3209
Star
106
Fork
815
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
94
列表
看板
标记
里程碑
合并请求
70
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
94
Issue
94
列表
看板
标记
里程碑
合并请求
70
合并请求
70
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
31c87313
编写于
10月 11, 2022
作者:
DCloud_Heavensoft
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update secure-network.md
上级
7b8ac6a2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
42 deletion
+63
-42
docs/uniCloud/secure-network.md
docs/uniCloud/secure-network.md
+63
-42
未找到文件。
docs/uniCloud/secure-network.md
浏览文件 @
31c87313
**云端一体安全网络**
> HBuilderX 3.6.
2
+ 支持
> HBuilderX 3.6.
6
+ 支持
## 简介
网络安全的问题很多:
1.
客户端受信。
因为过去采用无状态网络通过接口交换数据,客户端的真实性很难保证
。
2.
网络
抓包,即便是https的请求也会被抓包
。
1.
客户端受信。
由于http的无状态,客户端的真实性很难保证。模拟客户端、重签apk,防不胜防
。
2.
网络
受信。即便是https的请求也会被抓包,路由器、地方运营商都可能获取你的数据、劫持和改写你的请求
。
当攻击者了解了你的服务器接收什么样的数据时,就可以冒名客户端,提交假数据来攻击你的服务器。
尤其当你的业务中涉及促销、返佣、激励视频等场景,非常容易被刷。褥羊毛已经是一个非常成熟的灰产。
尤其当你的业务中涉及促销、返佣、激励视频等场景,非常容易被刷。褥羊毛已经是一个非常成熟的灰产
,哪里有漏洞,哪里就有他们赚钱的机会
。
DCloud面向开发者同时提供了端引擎
`uni-app`
和 云引擎
`uniCloud`
,
其实可以
提供云端一体的安全网络的能力。
DCloud面向开发者同时提供了端引擎
`uni-app`
和 云引擎
`uniCloud`
,
如今进一步升级,
提供云端一体的安全网络的能力。
`uni-app`
连接
`uniCloud`
时,可以选择是否启动安全网络。它通过高安全的保护机制,防止客户端伪造和通信内容抓包。
`uni-app`
连接
`uniCloud`
时,可以选择是否启动安全网络。它通过高安全的保护机制,
解决了客户端受信和网络受信的问题,
防止客户端伪造和通信内容抓包。
注意:安全网络不支持web平台,只支持微信小程序和App。并且App的安全级别更高。
...
...
@@ -25,9 +25,40 @@ DCloud面向开发者同时提供了端引擎`uni-app` 和 云引擎`uniCloud`
|:-:|:-:|
|3.6.6+|3.6.6+|
##
准备工作
##
如何开通
### 微信小程序@mp-weixin
App和微信小程序略有区别,但大体都要经过如下流程:
1.
在dev.dcloud.net.cn的应用管理中指定要开通的应用,在“各平台信息”中配置app的包名、签名摘要或者微信小程序的appid。
2.
在uniCloud web控制台选定一个服务空间,选择安全网络,关联某个app。
两个平台细化说明如下。
### App平台开通安全网络@app
1.
在
[
开发者中心
](
https://dev.dcloud.net.cn/
)
`应用详情 --> 证书管理`
内填写安卓应用的包名、签名和iOS应用的bundleId。一个应用只能有一个发行证书配置,但是可以有多个开发证书配置
【图片待补充】
2.
在uniCloud控制台关联允许发送安全网络请求的应用
【图片待补充】
3.
在项目根目录manifest.json文件内为app平台开启安全网络模块
【图片待补充】
注意:打包后生效。测试时需打包
[
自定义基座
](
../tutorial/run/run-app.md#customplayground
)
。
4.
在服务空间创建数据表
[
opendb-app-client-key
](
缺链接!!!!!!!!!!
)
用于保存发放给客户端的密钥对
-
切勿删除或修改此集合内容,否则会导致部分客户端不能发送安全网络请求(重新安装客户端或清除客户端数据后才能正常使用)
-
如果服务空间开通了redis会在redis内存储一份客户端密钥对以加速安全网络请求的处理,所使用的键为
`unicloud:encryption:app-client-key:{appId}:{deviceId}:string`
5.
上传任意schema文件到服务空间以触发一次clientDB云端模块的更新
**这只写了云打包,离线打包呢?!!!!!!!**
### 微信小程序开通安全网络@mp-weixin
安全网络在微信小程序上的实现,依赖了微信提供的一些用户级的凭据。所以需要下载
`uni-id-pages`
和
`uni-open-bridge`
,并在app.vue里初始化。
...
...
@@ -130,34 +161,16 @@ App.vue页面需要补充如下代码:
【图片待补充】
### App@app
App平台安全网络需使用
[
自定义基座
](
../tutorial/run/run-app.md#customplayground
)
,App端安全网络不依赖于登录逻辑。
## 数据加密传输的开发方式
1.
在
[
开发者中心
](
https://dev.dcloud.net.cn/
)
`应用详情 --> 证书管理`
内填写安卓应用的包名、签名和iOS应用的bundleId。一个应用只能有一个发行证书配置,但是可以有多个开发证书配置
如果你只需要客户端身份验真,不需要对网络传输的数据加密,那么参考上一章节的文档就够了。
【图片待补充】
如果还需要加密传输的数据,则在客户端和服务器都要编写代码,倒不需要写具体的加密解密算法,而是需要在客户端指定哪些请求、哪些数据要加密,而在云端要校验客户端是否指定了正确的条件。
2.
在uniCloud控制台关联允许发送安全网络请求的应用
具体写法如下:
【图片待补充】
3.
在项目根目录manifest.json文件内为app平台开启安全网络模块
【图片待补充】
4.
创建集合
`opendb-app-client-key`
用于保存发放给客户端的密钥对
-
切勿删除或修改此集合内容,否则会导致部分客户端不能发送安全网络请求(重新安装客户端或清除客户端数据后才能正常使用)
-
如果服务空间开通了redis会在redis内存储一份客户端密钥对以加速安全网络请求的处理,所使用的键为
`unicloud:encryption:app-client-key:{appId}:{deviceId}:string`
5.
通过上传schema触发一次clientDB云函数的更新
## 调用方式
准备工作完成后,在uni-app客户端调用uniCloud服务器时,可以通过参数来声明这次请求走安全网络,对传输数据加密。
### 云函数
### 客户端请求云函数
客户端通过callFunction调用云函数时,加入secretType参数。
```
js
...
...
@@ -170,16 +183,20 @@ uniCloud.callFunction({
})
```
### 云对象
也就是每个callFunction请求,都可以指定是否加密,以及是对上行数据还是下行数据加密。
### 客户端请求云对象
客户端通过importObject调用云对象时,通过secretMethods参数来配置每个方法调用时是否加密。
```
js
uniCloud
.
importObject
(
'
object-name
'
,
{
secretMethods
:
{
'
login
'
:
'
both
'
}
//
支持配置所有方法设置加密
参见下面的 secretMethods 说明
secretMethods
:
{
'
login
'
:
'
both
'
}
//
对login方法设置为上下行的数据均要加密。也支持配置所有方法设置加密,
参见下面的 secretMethods 说明
})
```
也就是云对象导入时配置某个方法的请求是否要加密,以及是对上行数据还是下行数据加密。那么在客户端调用云对象的相应方法时会自动按这个配置执行。
### clientDB
暂不支持
...
...
@@ -188,11 +205,13 @@ uniCloud.importObject('object-name', {
|值 |描述 |
|:-: |:-: |
|none |不加密,默认值 |
|none |
上下行都
不加密,默认值 |
|request |只加密客户端请求时的上行数据,服务器下发数据不加密 |
|response |客户端请求时不加密数据,只加密服务器下发的数据 |
|both |客户端和服务器上行下行数据都加密数据 |
-
之所以提供如此精细的加密配置,是因为加解密都是消耗资源的,增加了等待时间。一般只对真正需要防止网络窃取的保密数据才加密。
**secretMethods 属性说明**
`secretMethods`
是云对象中指定需要加密的方法名。
...
...
@@ -204,19 +223,21 @@ uniCloud.importObject('object-name', {
**注意**
-
微信小程序安全网络依赖于登录逻辑,因此在客户端检测到发送安全网络请求时
用户未登录时
会自动调用uni-id-co的loginByWeixin接口
-
微信小程序安全网络依赖于登录逻辑,因此在客户端检测到发送安全网络请求时
,若用户未登录则
会自动调用uni-id-co的loginByWeixin接口
## 服务器端
虽然uni-app客户端和uniCloud云端通信是加密的,但对于开发者而言过程是透明的。
uni云端一体安全网络,已经在底层封装好了复杂的安全相关的算法。开发者只需关心对哪些请求、哪些数据进行加密。
**不管是客户端接收云端数据、还是云端接受客户端数据,开发者的代码拿到的数据永远都是解密后的数据。**
**不管是客户端接收云端数据、还是云端接受客户端数据,开发者的代码拿到的数据都是解密后的数据。**
但云端有一个注意事项:为了避免客户端伪造
`secretType`
获取服务器敏感数据,应以服务器端为准,如果客户端携带的
`secretType`
不符合要求应拒绝响应数据。
但云端有一个注意事项:为了避免客户端伪造
`secretType`
获取服务器敏感数据,应以服务器端为准,如果客户端携带的
`secretType`
不符合要求应拒绝响应数据。示例代码如下
示例代码如下:
### 云函数中验证secretType
在云函数的context中有secretType。
在云函数的context中有secretType。
如果这个云函数的返回数据必须加密,那么应该使用如下方式校验客户端的请求是否合法。
```
js
exports
.
main
=
async
(
event
,
context
)
=>
{
...
...
@@ -224,14 +245,14 @@ exports.main = async (event, context) => {
// secretType 是客户端调用 uniCloud.callFunction 传递的参数 secretType
if
(
secretType
!==
'
both
'
||
secretType
!==
'
response
'
)
{
return
null
return
null
// 拒绝返回有效数据
}
}
```
### 云对象中验证secretType
在云对象的this中有secretType。
在云对象的this中有secretType。
如果这个云对象的reward方法的返回数据必须加密,那么应该使用如下方式校验客户端的请求是否合法。
```
js
module
.
exports
=
{
...
...
@@ -243,7 +264,7 @@ module.exports = {
// secretType 是客户端调用 uniCloud.importObject 传递的参数 secretMethods
if
(
methodName
===
'
reward
'
&&
(
secretType
!==
'
both
'
||
secretType
!==
'
response
'
))
{
throw
new
Error
(
'
secretType invalid
'
)
throw
new
Error
(
'
secretType invalid
'
)
// 拒绝返回有效数据
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录