基于强绑定令牌的H5页面与原生交互安全防护方法及系统与流程

摘要: 本发明涉及移动应用安全,特别涉及一种基于强绑定令牌的h5页面与原生交互安全防护方法及系统。背景技术:1、随着移动互联网技术的普及,混合开发架构因兼顾原生应用的运...
基于强绑定令牌的H5页面与原生交互安全防护方法及系统与流程

本发明涉及移动应用安全,特别涉及一种基于强绑定令牌的h5页面与原生交互安全防护方法及系统。

背景技术:

1、随着移动互联网技术的普及,混合开发架构因兼顾原生应用的运行性能与h5页面的迭代效率,已成为移动应用的主流开发模式之一。在该架构下,h5页面由webview等容器加载渲染,并通过原生侧桥接的jsbridge接口调用支付、本地存储、系统权限等原生系统能力,此类调用直接涉及用户隐私与终端敏感功能,因而需在调用侧实施鉴权管控。现有的jsbridge鉴权方案主要围绕远程加载的h5页面形成:一方面以域名白名单约束页面来源,另一方面以固定令牌或会话令牌作为调用凭证,部分方案还在运行时计算页面内容哈希并与令牌绑定,以完成对调用方的完整性确认。上述方案针对远程加载页面能够基于域名与来源差异建立访问控制,已在大量上线应用中得到应用,属于业内的常规做法。

2、然而,当h5页面并非远程加载、而是全部内置于应用assets目录或以沙盒离线包形式下发本地加载时,上述方案存在以下不足:其一,在篡改识别方面,运行时计算哈希以运行当刻的页面内容本身为信任依据,属于页面自证合法:若攻击者通过应用重打包、篡改沙盒文件或注入恶意脚本等方式替换本地页面,原生侧仍会基于篡改后的内容计算哈希并据此签发令牌,被篡改页面得以正常调用原生能力,鉴权机制形同虚设与否虽取决于实施细节,但其识别篡改的前提已不成立。其二,在有效期设计方面,单次有效令牌在一次调用后即作废,并发调用场景下易出现凭证冲突与调用失败,而长期有效的固定令牌一旦泄露即可能被持续滥用,二者均难以兼顾并发调用体验与泄露后的风险可控性。其三,在绑定关系方面,现有令牌多仅与页面域名或url绑定,缺乏与webview实例、页面加载路径等维度的深度绑定,令牌被窃取后可跨webview、跨页面复用,攻击面难以收敛。其四,在令牌传递方面,部分方案以url参数、cookie、本地存储等载体传递令牌,上述载体可被页面脚本读取、被网络抓包获取或留存于浏览历史,泄露隐患突出。鉴于此,如何针对全本地加载的h5页面,在页面加载前完成篡改识别、在令牌设计上平衡并发体验与泄露风险、并收敛令牌的复用与泄露途径,成为本领域有待解决的技术问题。

技术实现思路

1、本发明的目的是提供一种基于强绑定令牌的h5页面与原生交互安全防护方法及系统,以解决上述现有技术存在的问题。

2、为实现上述目的,本发明采用的技术方案为:

3、第一方面,本发明提供了一种基于强绑定令牌的h5页面与原生交互安全防护方法,包括:

4、加载本地h5页面前,原生侧读取目标页面文件的字节流并计算实时哈希值,将所述实时哈希值与预置的官方基准哈希值比对;

5、若不一致,判定页面被篡改,阻断加载且不生成jsbridge调用令牌;

6、若一致,将所述官方基准哈希值标记为webview实例的合法页面身份标识并允许加载;

7、页面加载完成后,所述原生侧生成所述jsbridge调用令牌,所述令牌绑定webview实例唯一标识、所述合法页面身份标识和本地加载路径哈希三个维度的标识,设置预设有效期且无调用次数限制;

8、所述原生侧执行js代码将所述令牌以只读全局变量注入页面js上下文,禁止通过url参数、cookie、本地存储传递所述令牌;

9、h5侧调用原生接口时携带所述令牌,所述原生侧按优先级依次执行格式校验、签名校验、与所述三个维度的标识对应的绑定校验及有效期校验,全部通过后执行对应原生接口逻辑。

10、在一些实施方式中,所述将所述实时哈希值与预置的官方基准哈希值比对之前,所述官方基准哈希值按页面类型以下述两种方式预置:

11、针对内置静态页面,在应用编译阶段遍历所有内置本地h5页面文件,逐文件计算sm3哈希值以生成文件路径与基准哈希的映射表,将所述映射表加密后编译进原生native层代码,运行时所述映射表仅可读取不可修改;

12、针对沙盒离线包页面,在离线包发布时由服务端生成包含所有文件基准哈希的资源清单并对所述资源清单进行私钥签名,所述原生侧下载所述离线包后先用内置公钥验证所述资源清单的签名,再逐文件校验哈希,校验通过后解压安装,运行时加载页面前从已验签的所述资源清单中读取对应文件的所述官方基准哈希值。

13、在一些实施方式中,所述加载本地h5页面前,所述原生侧还校验目标页面文件的路径是否位于预设的本地加载路径白名单内,仅允许加载位于所述本地加载路径白名单内的页面文件,对不在所述本地加载路径白名单内的页面文件直接禁止加载;

14、所述判定页面被篡改、阻断加载之后,还上报安全篡改事件并由所述webview加载安全错误提示页,所述安全篡改事件包含被篡改页面文件的文件路径、设备指纹和哈希摘要。

15、在一些实施方式中,所述原生侧生成的所述jsbridge调用令牌采用三段式结构,所述三段式结构包括头部、载荷和签名,所述头部、所述载荷和所述签名分别经base64url编码后拼接;

16、所述头部用于标识签名算法与协议版本;

17、所述载荷包含所述webview实例唯一标识wid、所述合法页面身份标识phash、所述本地加载路径哈希path_hash、令牌唯一id jti、签发时间戳iat和过期时间戳exp,其中所述过期时间戳exp=所述签发时间戳iat+300×1000毫秒,使所述预设有效期为固定5分钟;

18、所述签名由所述原生侧持有且不可导出、不可读取的hmac-sm3密钥对所述头部与所述载荷的拼接串计算生成;

19、所述令牌及其过期时间被缓存于对应的webview实例,且每个webview实例仅保留一个当前有效的所述令牌。

20、在一些实施方式中,所述原生侧执行js代码将所述令牌以只读全局变量注入页面js上下文,包括:

21、所述原生侧通过android平台的evaluatejavascript接口、ios平台的evaluatejavascript接口或harmony平台的runjavascript接口执行所述js代码,并通过object.defineproperty将全局变量window.__bridge_token__配置为只读、不可配置且不可枚举的全局属性,以作为所述只读全局变量;

22、注入完成后,所述原生侧执行读取校验,以确认注入结果与生成的所述令牌一致。

23、在一些实施方式中,所述方法还包括令牌无感续期机制,所述令牌无感续期机制包括被动刷新模式和主动续期模式:

24、所述被动刷新模式为,在所述有效期校验确定所述令牌已过期时,所述原生侧拒绝本次调用并返回统一鉴权失效错误码,同时异步生成全新的所述令牌并注入所述js上下文,h5侧捕获所述统一鉴权失效错误码后自动延迟重试1次调用;

25、所述主动续期模式为,在所述令牌的剩余有效期小于预设阈值时,所述原生侧放行本次调用,同时后台异步生成新的所述令牌并静默注入,以重置所述预设有效期。

26、在一些实施方式中,所述方法还包括令牌作废机制:

27、在页面跳转或刷新触发页面加载开始回调后,立即将当前webview的旧令牌加入全局作废黑名单并清空缓存;

28、在所述webview实例销毁时,清空所述webview实例内的令牌缓存,并将对应的令牌加入所述全局作废黑名单;

29、所述原生侧校验时同步校验所述令牌是否位于所述全局作废黑名单中,若已作废则拒绝调用;

30、在1分钟内同一webview连续5次校验失败时,冻结所述同一webview的jsbridge调用能力1分钟并上报安全告警。

31、在一些实施方式中,所述原生侧按优先级依次执行的所述有效期校验包括:

32、解码所述载荷获取所述签发时间戳iat和所述过期时间戳exp,校验exp-iat严格等于300000毫秒以防止所述预设有效期被篡改,并校验当前系统时间早于所述过期时间戳exp以确认所述令牌未过期。

33、在一些实施方式中,所述方法还包括风险环境联动防护,所述原生侧检测到设备处于调试注入、应用重打包或模拟器的风险环境时,禁用所有本地h5页面的jsbridge调用能力且不生成任何令牌;

34、所述令牌的生成、哈希计算、签名校验和官方基准哈希值读取的核心逻辑均在原生native层实现,所述核心逻辑经混淆、符号隐藏和字符串加密处理并加入完整性校验,以防止被hook篡改。

35、第二方面,本发明提供了一种基于强绑定令牌的h5页面与原生交互安全防护系统,应用于如上所述的基于强绑定令牌的h5页面与原生交互安全防护方法,所述系统包括核心功能模块层以及与所述核心功能模块层连接的基础可信存储层;

36、所述核心功能模块层包括前置校验模块、令牌生成模块、令牌注入模块、调用校验模块、令牌续期模块和安全管控模块;

37、所述前置校验模块,用于在加载本地h5页面前,校验目标页面文件的路径是否位于本地加载路径白名单内,读取目标页面文件的字节流并计算实时哈希值,将所述实时哈希值与预置的官方基准哈希值比对;若不一致,判定页面被篡改,拦截页面加载且不生成jsbridge调用令牌;若一致,将所述官方基准哈希值标记为webview实例的合法页面身份标识并允许加载;

38、所述令牌生成模块,用于在页面加载完成后,组装webview实例唯一标识、所述合法页面身份标识和本地加载路径哈希三个维度的标识以形成载荷,并对所述载荷计算签名,生成设置预设有效期且无调用次数限制的所述jsbridge调用令牌;

39、所述令牌注入模块,用于执行js代码将所述令牌以只读全局变量注入页面js上下文并配置为只读、不可配置且不可枚举的属性,以及对注入结果进行完整性校验;

40、所述调用校验模块,用于在h5侧调用原生接口时携带所述令牌的情况下,按优先级依次执行格式校验、签名校验、与所述三个维度的标识对应的绑定校验及有效期校验,对未通过校验的调用予以拦截,并记录和上报安全日志;

41、所述令牌续期模块,用于在所述令牌过期时进行被动刷新、在所述令牌剩余有效期小于预设阈值时进行主动续期,以实现业务无感知的令牌更新;

42、所述安全管控模块,用于进行风险环境检测、作废令牌管理以及全局联动封禁;

43、所述基础可信存储层包括基准哈希存储区、令牌缓存区、作废令牌黑名单和白名单配置区,用于为所述核心功能模块层提供可信数据支撑。

44、本发明提供的技术方案带来的有益效果至少包括:

45、本技术方案将信任根上移至原生侧预置的官方基准哈希并在加载前比对,篡改页面被阻断且不签发凭证,杜绝被篡改页面自证合法的漏洞;预设有效期与无调用次数限制相结合,避免一次性令牌即用即废的并发冲突,又将泄露后可利用窗口限于5分钟内;令牌与webview实例、页面身份、加载路径三维度绑定,被窃凭证无法跨实例、跨页面、跨目录复用,攻击面收敛于单一实例单一页面;以只读全局变量交付令牌,不经过url、cookie、本地存储,切断脚本读取、抓包与历史残留等泄露途径;签发、校验、续期全程下沉原生侧,页面侧业务代码无需改动。