目录
安全
一、应用隐私保护
1、使用隐私声明获取用户同意
2、减少应用的位置信息访问权限
模糊定位、精确定位
使用LocationButton获取位置信息
3、减少使用存储权限
存储权限:app就可以偷偷的分析用户的文件和图片
Picker选择器选择图片,避免过量授权
4、动态申请敏感权限
合理的权限范围
最小化权限申请
明确解释权限用途
二、应用数据安全
1、风险等级划分
设备等级划分:el1 - el5
数据等级划分:el1 - el4
2、分级数据加密
APP数据等级一般使用:el2
AES加密算法加密数据 + eL2
通用密钥库系统(OpenHarmony Universal KeyStore,简称HUKS),向业务提供了平台级的密钥管理能力,包括密钥的生成、导入、销毁、证明、协商、派生、加密/解密、签名/验签及访问控制等功能。
三、应用安全编码实践
1、通用组件安全
1.1 建议不涉及对外交互业务的应用组件的exported属性设置为false
1.2 对外交互的应用组件应设置合理的访问权限
1.3 建议隐式启动应用组件时避免携带个人数据
通过示例代码中的action:”ability.want.test”可以隐式启动组件,如果恶意应用也声明了该action,隐式调用时会出现一个列表让用户选择,如果用户进入了恶意应用,则恶意应用可以获取传递的敏感信息。
1.4 避免涉及口令输入的应用界面可以被截屏或录屏
恶意软件骗取用户信任获得授权后,截屏或录屏获取用户口令信息。
2、公共事件安全
2.1 避免使用携带个人数据未设置权限的动态公共事件
通过subscriberPermissions字段设置了接收公共事件的权限,这样,发布者要求订阅者必须具有“ohos.permission.READ_CONTACTS”权限,才能接收该携带联系人数据的公共事件。
2.2 建议对涉及敏感功能的公共事件进行访问权限控制
对外提供的公共事件,建议添加用户二次确认,防止恶意应用获取用户敏感信息。
3、WebView安全
3.1 避免加载不安全的URL或页面
let res = tmpUri.normalize(); // 注意,需要先对tmpUri进行normalize,否则会绕过安全校验
安全校验包括:
格式校验:是否为有效的URL,是否包含非法字符等
域名校验:是否为钓鱼网站域名,是否与当前应用一致等
参数校验:是否包含非法参数等比如 tmpUri 是 “https://example.com/page?param=SELECT * FROM users”,其中的参数部分看起来像是 SQL 查询语句
证书校验(如果是 HTTPS 连接):是否为可信的证书,是否过期等
自定义的校验:
获取到scheme、host、port、path等参数值后,根据业务实际进行安全校验
3.2 避免加载不可信的javascript脚本
对加载的js代码进行白名单校验
let whiteMethods = ["test()", "test1()"]
let jsMethod: string = "alert(`xss`)" // 外部可控字段
// 白名单校验
if (whiteMethods.indexOf(jsMethod) === -1) {
console.error("input method not in whiteList")
return
}
// 执行js代码
this.controller.runJavaScript(jsMethod)
.then((result) => {
console.log('result: ' + result);
})
.catch((error: BusinessError) => {
console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
})
3.3 避免将mixedMode属性配置成All
默认不允许加载HTTP和HTTPS混合内容。支持三种模式,其中All是允许混合内容加载,存在中间人攻击的风险,默认不允许配置成All。
3.4 避免在SSL校验出错时继续加载页面
如果在SSL校验出错时,直接调用handleConfirm函数,则页面会忽略SSL错误继续加载,会导致中间人攻击等风险。
3.5 避免在用户同意前返回位置信息
geolocationAccess开关用于配置是否开启地理位置权限,默认开启。onGeolocationShow回调函数用于通知用户收到地理位置信息获取请求。H5页面请求获取地理位置信息时,Web组件通过上述两个API进行配置。
存在使用场景时,需要在onGeolocationShow回调内先弹框提示用户,并经过用户确认和同意才可以返回位置信息,否则存在隐私泄露风险。
3.6 避免注册返回含有全局认证凭据的JavaScriptProxy
在HarmonyOS中,可以使用Web组件加载H5等页面。同时Web组件可以通过JavaScriptProxy方法或者通过WebController的registerJavaScriptProxy方法向H5提供JS接口,供H5访问。
如果提供的JS接口返回了敏感信息或有敏感操作,被恶意调用,则存在安全风险。
第一种方法:在加载URL页面前,校验当前页面的URL是否在白名单内,仅允许白名单内的URL调用。要同时校验协议、域名、PATH等,白名单范围控制的越小越安全。
第二种方法:针对H5页面申请一个新的H5Token,并严格限定此H5Token可以调用的云服务业务接口在最小范围内。
行者常至,为者常成!