Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
你丑我先上
unidocs-zh
提交
31c87313
U
unidocs-zh
项目概览
你丑我先上
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录