Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
65a32cd0
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3200
Star
106
Fork
813
代码
文件
提交
分支
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看板
提交
65a32cd0
编写于
3月 03, 2022
作者:
DCloud-yyl
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add app-sec-api.md
上级
86510fc8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
127 addition
and
0 deletion
+127
-0
docs/app-sec-api.md
docs/app-sec-api.md
+127
-0
未找到文件。
docs/app-sec-api.md
0 → 100644
浏览文件 @
65a32cd0
为了提升App的安全性,推荐对安装包进行加固处理(如腾讯、360等加固平台),对安全性有更高要求的App建议使用商用加固解决方案。同时也可以使用以下安全类API在应用运行期进行检测,加强应用的安全性。
### getSignature
[
plus.navigator.getSignature
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.getSignature
)
用于获取应用签名标识,可以判断App是否被重新签名。
签名证书是对App开发者身份的唯一标识,如果程序未对签名证书进行校验,可能被反编译后进行二次打包使用其它签名证书重新签名。如重新签名的App可以正常启动,则可能导致App被仿冒盗版,影响其合法收入,甚至可能被添加钓鱼代码、病毒代码、恶意代码,导致用户敏感信息泄露或者恶意攻击。
uni-app项目可以在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,示例如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
// 签名证书检验
var
platform
=
uni
.
getSystemInfoSync
.
platform
;
var
sign
=
plus
.
navigator
.
getSignature
();
if
(
'
android
'
==
platform
){
//Android平台
var
sha1
=
'
baad093a82829fb432a7b28cb4ccf0e9f37dae58
'
;
//修改为自己应用签名证书SHA-1值,是全小写并且中间不包含“:”符号
if
(
sha1
!=
sign
){
//证书不对时退出应用
plus
.
runtime
.
quit
();
}
}
else
{
//iOS平台
var
md5
=
'
a2e629f0ea915b4ed11e296a059c9a12
'
;
//修改为自己应用Apple Bunld ID(AppID)的md5值
if
(
md5
!=
sign
){
//不进入应用或循环弹出提示框
console
.
log
(
'
应用被破坏,无法正常运行!
'
);
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被破坏,无法正常运行!
'
,
});
}
}
// #endif
}
```
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
### isSimulator
[
plus.navigator.isSimulator
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.isSimulator
)
用于判断当前应用是否运行在模拟器中。
iOS系统由于苹果限制了正式打包后不能在模拟器上运行,一般不存在这种情况;Android系统是开源的,底层代码都是公开的,因此市面上有很多Android模拟器,此问题比较严重。
模拟器通常是运行在PC上,可以利用一些自动化工具自动操作使用App,另外模拟器是一个虚拟操作系统,可能会破坏原生系统的安全性,导致用户敏感信息泄露。
以下示例在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
// 模拟器检验
if
(
plus
.
navigator
.
isSimulator
()){
//弹出提示框
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被不能运行到模拟器!
'
,
complete
:
()
=>
{
plus
.
runtime
.
quit
();
}
});
}
// #endif
}
```
实际项目中可以将此信息提交业务服务器进行判断,如在模拟器环境不允许登录等,多次尝试在模拟器登录可以临时封号,人工客户联系用户核实等,具体可根据业务情况进行调整。
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
### isSetProxy
[
plus.networkinfo.isSetProxy
](
https://www.html5plus.org/doc/zh_cn/device.html#plus.networkinfo.isSetProxy
)
用于判断当前应用网络环境是否设置代理。
设置代理后所有网络传输的数据都会经过代理服务器,也就是说代理服务器可能看到所有传入内容,导致用户敏感信息泄露、业务服务器被恶意攻击等问题。当然在某些企业内部网络环境为了保证安全,访问公网可能需要设置代理,开发者需要考虑这种需求来决定是否限制应用正常运行。
可以在用户登录时提交当前网络环境是否使用代理,示例代码如下:
```
js
function
login
()
{
//...
//获取网络代理状态
var
isProxy
=
plus
.
networkinfo
.
isSetProxy
();
if
(
isProxy
){
console
.
log
(
"
当前网络环境设置了代理!
"
);
}
//将使用代理状态提交给业务服务器
//...
}
```
### isRoot
[
plus.navigator.isRoot
](
https://www.html5plus.org/doc/zh_cn/navigator.html#plus.navigator.isRoot
)
用于判断当前应用运行的设备是否被root破解。
> 注: 仅iOS平台支持,Android平台暂不支持
root破解(也叫越狱)是利用iOS系统的漏洞来破解系统安全机制,让任何应用可以获得系统级权限,从而对系统可以进行更灵活的自定义修改,譬如说修改字体、修改主题以及使用一些插件等。iOS系统设计了沙盒机制,限制应用只能使用自身的数据,root破解后则应用可以读取修改其它任何应用的数据,可能导致用户敏感信息泄露,甚至修改其它应用的数据或代码,恶意攻击正常App。
建议在应用启动时判断,如果运行在root破解环境则提示用户无法正常使用,uni-app项目可以在App.vue的应用生命周期
[
onLaunch
](
https://uniapp.dcloud.io/collocation/frame/lifecycle?id=%e5%ba%94%e7%94%a8%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f
)
中进行校验,示例如下:
```
js
onLaunch
:
function
(
inf
)
{
console
.
log
(
'
App Launch
'
);
// #ifdef APP-PLUS
//ROOT检验
if
(
plus
.
navigator
.
isRoot
()){
//弹出提示框
uni
.
showModal
({
title
:
'
错误
'
,
content
:
'
应用被不能运行到越狱或ROOT环境!
'
,
complete
:
()
=>
{
//循环弹出提示框或死循环引起应用退出
}
});
}
// #endif
}
```
> 提示:为了防止js检验代码被反编译篡改,建议将签名校验代码放到独立js文件中并配置[js/nvue文件原生混淆加密](app-sec-confusion),或者使用apk加固处理
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录