基于业务平台的业务执行方法及装置与流程

文档序号:26348145发布日期:2021-08-20 20:20阅读:108来源:国知局
基于业务平台的业务执行方法及装置与流程

本公开涉及计算机应用领域,尤其涉及基于业务平台的业务执行方法及装置。



背景技术:

在现代应用程序设计中,业务平台可以动态地引入其他开发者提交的业务代码,通过插件或者“微应用”的形式,实现更加丰富的业务,提高平台的扩展性;例如,在javascript代码编写的web页面业务平台中,既可以通过运行网页本身的代码执行基础业务,也可以通过运行用户即时提交的用户代码来执行扩展业务。但是,由于来自用户的代码的运行效率以及安全性都可能存在问题,因而运行用户代码可能会导致程序自身代码的长时间阻塞,甚至可能篡改业务平台的全局变量,造成业务平台功能的不稳定。

相关技术中,人们可以采用构造闭包的方式进行软件开发,业务平台主动向闭包内的用户代码暴露模拟的全局对象属性或方法,并通过api代理的方式完成用户代码与业务平台自身代码的交互。

但是在采用上述方案的情况下,虽然模拟的全局对象属性或方法可以供闭包内的用户代码安全使用,但实际运行过程中并不能阻止用户代码获取并篡改上述业务平台真正的全局变量,因此难以保证程序的安全和稳定。



技术实现要素:

有鉴于此,本公开提供了基于业务平台的业务执行方法、装置、电子设备和存储介质,以至少解决相关技术中的技术问题。本公开的技术方案如下:

根据本公开实施例的第一方面,提出了一种业务执行方法,包括:

从业务平台的主线程中获取不涉及敏感权限的第一类业务;

将所述第一类业务传递至所述主线程的子线程中;其中,所述子线程的第一作用域内包含重定义后的、不涉及敏感权限的全局对象属性或方法;

在所述子线程的所述第一作用域内,基于所述重定义后的、不涉及敏感权限全局对象属性或方法,执行所述第一类业务。

可选的,所述从业务平台的主线程中获取不涉及敏感权限的第一类业务,包括:

调用通过业务平台的主线程中与不涉及敏感权限的第一类业务对应的第一业务接口,接收第一业务执行指令;其中,所述第一业务执行指令中携带待执行的第一类业务的标识;

从与所述主线程相关联的存储区域中,获取与所述第一业务执行指令中携带的所述标识对应的所述第一类业务。

可选的,所述第一作用域内还包括第二作用域;所述第二作用域内包含重定义后的、涉及敏感权限的全局对象属性或方法;所述方法还包括:

调用通过业务平台的主线程中与涉及敏感权限的第二类业务对应的第二业务接口,接收第二业务执行指令;其中,所述第二业务执行指令中携带待执行的第二类业务的标识;

从与所述主线程相关联的存储区域中,获取与所述第二业务执行指令中携带的所述标识对应的获取所述第二类业务;

将所述第二类业务传递至所述子线程中,并在所述第二作用域内,基于所述重定义后的、涉及敏感权限的全局对象属性或方法,执行所述第二类业务。

可选的,所述将所述第一类业务传递至所述主线程的子线程中,包括:

在所述主线程中构造生成携带所述第一类业务的消息;

将所述消息传递至所述主线程向所述的子线程发送所述消息中,以使所述子线程基于预设的监听接口获取所述消息,并从所述消息中解析得到所述第一类业务。

可选的,在从业务平台的主线程中获取不涉及敏感权限的第一类业务之前,所述方法还包括:

新建所述业务平台主线程的子线程,并在所述子线程中建立所述第一作用域;

在所述第一作用域内,对不涉及敏感权限的全局对象属性或方法进行重定义。

可选的,所述方法还包括:

将所述第一类业务的执行结果从所述子线程中传递至所述主线程,以使所述主线程进一步将所述执行结果返回给所述第一类业务对应的业务发起方。

可选的,所述重定义后的、不涉及敏感权限的全局对象属性或方法是只读的。

根据本公开实施例的第二方面,提出了一种基于业务平台的业务执行装置,包括:

第一获取模块,被配置为从业务平台的主线程中获取不涉及敏感权限的第一类业务;

第一传递模块,被配置为将所述第一类业务传递至所述主线程的子线程中;其中,所述子线程的第一作用域内包含重定义后的、不涉及敏感权限的全局对象属性或方法;

第一执行模块,被配置为在所述子线程的所述第一作用域内,基于所述重定义后的、不涉及敏感权限全局对象属性或方法,执行所述第一类业务。

可选的,所述第一获取模块进一步被配置为:

通过业务平台的主线程中与不涉及敏感权限的第一类业务对应的第一业务接口,接收第一业务执行指令;其中,所述第一业务执行指令中携带待执行的第一类业务的标识;

从与所述主线程相关联的存储区域中,获取与所述第一业务执行指令中携带的所述标识对应的所述第一类业务。

可选的,所述第一作用域内还包括第二作用域;所述第二作用域内包含重定义后的、涉及敏感权限的全局对象属性或装置;所述装置还包括:

第二获取模块,被配置为通过业务平台的主线程中与涉及敏感权限的第二类业务对应的第二业务接口,接收第二业务执行指令;其中,所述第二业务执行指令中携带待执行的第二类业务的标识;从与所述主线程相关联的存储区域中,获取与所述第二业务执行指令中携带的所述标识对应的所述第二类业务;

第二传递模块,被配置为将所述第二类业务传递至所述子线程中;

第二执行模块,被配置为在所述第二作用域内,基于所述重定义后的、涉及敏感权限的全局对象属性或装置,执行所述第二类业务。

可选的,所述传递模块被进一步配置为:

在所述主线程中生成携带所述第一类业务的消息;将所述消息传递至所述主线程的子线程中,以使所述子线程基于预设的监听接口获取所述消息,并从所述消息中解析得到所述第一类业务。

可选的,所述装置还包括:

初始化模块,被配置为在从业务平台的主线程中获取不涉及敏感权限的第一类业务之前,新建所述业务平台主线程的子线程,并在所述子线程中建立所述第一作用域;在所述第一作用域内,对不涉及敏感权限的全局对象属性或装置进行重定义。

可选的,所述装置还包括:

结果返回模块,被配置为将所述第一类业务的执行结果从所述子线程中传递至所述主线程,以使所述主线程进一步将所述执行结果返回给所述第一类业务对应的业务发起方。

可选的,所述重定义后的、不涉及敏感权限的全局对象属性或装置是只读的。

根据本公开实施例的第三方面,提出了一种电子设备,包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现上述任一实施例所述的基于业务平台的业务执行方法。

根据本公开实施例的第四方面,提出一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的基于业务平台的业务执行方法。

根据本公开实施例的第五方面,提出一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述任一实施例所述的基于业务平台的业务执行方法。

以上技术方案中,一方面,由于第一类业务在业务平台主线程的子线程内执行,子线程中的全局对象属性或方法的修改不会影响业务平台主线程中的全局对象属性或方法,因此实现了与主线程的隔离,保证执行第一类业务时主线程全局对象的安全性;

另一方面,由于上述第一类业务在第一作用域内被执行的过程,基于被重定义后的全局对象属性或方法完成,因此,上述对不涉及敏感权限的全局对象属性或方法的重定义可以进一步限制第一类业务在执行过程中的行为,提高业务执行的安全性。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书文本一同用于解释原理,并不构成对本公开的不当限定。

图1是相关技术中一种软件开发模式的示意图;

图2是根据本公开的实施例示出的一种基于业务平台的业务执行方法流程图;

图3是根据本公开的实施例示出的一种代码的结构示意图;

图4是根据本公开的实施例示出的一种基于业务平台的业务执行装置的示意框图;

图5是根据本公开的实施例示出的一种电子设备的结构图。

具体实施方式

为了使本技术领域的人员更好地理解本公开一个或多个实施例中的技术方案,下面将结合本公开一个或多个实施例中的附图,对本公开一个或多个实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是一部分实施例,而不是全部的实施例。基于本公开一个或多个实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。

下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的系统和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

在现代应用程序设计中,业务平台可以动态地引入其他开发者提交的业务代码,通过插件或者“微应用”的形式,实现更加丰富的业务,提高平台的扩展性。

请参见图1,图1是相关技术中一种软件开发模式的示意图;该软件开发模式可以视作一种合作开发模式,在此种软件开发模式下,最终的软件产品由平台逻辑以及微应用逻辑两部分构成,其中,平台逻辑由平台开发者提供,而为应用逻辑由微应用开发者提供;采用此种开发模式,微应用开发者不再需要自行开发外部框架和平台,可以复用平台逻辑中提供的代码,专注于设计自身的业务逻辑;而平台开发者也只需要提供一个可靠的平台逻辑,即可获得与微应用开发者的合作机会,为自己的平台添加更多的业务功能。

举例而言,js(javascript)是一种具有函数优先的轻量级、解释型或即时编译型的高级编程语言。它既可以作为开发web页面的脚本语言,也可以应用到非浏览器环境中;在使用javascript语言编写的web页面业务平台中,既可以通过运行网页本身的代码执行基础业务,也可以通过运行用户即时提交的用户代码来执行扩展业务;上述网页可以起到上述平台的作用,通过执行用户提交的代码,即可完成对应的功能扩展。

但是,来自用户的代码可能存在某些技术缺陷,因而运行来自用户的代码可能带来一系列问题;例如,如果用户代码效率极低或者出现异常终端,可能会导致程序自身代码的长时间阻塞,而如果用户代码中错误地篡改了敏感的全局对象,则可能导致业务平台功能的不稳定。

相关技术中,人们可以采用构造闭包的方式进行软件开发,业务平台通过对全局对象的属性和api进行代理的方式完成用户代码与业务平台自身代码的交互。

但是在采用上述方案的情况下,虽然模拟的全局对象属性或方法可以供闭包内的用户代码安全使用,但实际运行过程中并不能阻止用户代码获取并篡改上述业务平台真正的全局变量,因此难以保证程序的安全和稳定。

基于此,本公开提出一种将独立于业务平台主线程的子线程作为安全沙箱,基于在该子线程的特定作用域中重新定义后的全局对象属性或方法,执行用户提交到业务平台的业务的技术方案。

在实现时,可以首先从业务平台的主线程中获取不涉及敏感权限的第一类业务,再将该第一类业务传入该主线程的子线程,其中,该子线程中可以建立有第一作用域,该作用域内包含不涉及全局对象属性或方法进行重定义,从而使主线程传入该子线程的第一类业务,可以基于重定义后的全局对象属性或方法在该作用域内执行。

举例而言,对于javascript编写的web页面业务平台而言,上述业务平台主线程的子线程可以通过webworker等方式新建,并可以进一步通过eval()函数等方式在上述子线程中建立作用域,在该作用域内将该子线程的全局对象属性或方法进行重定义,从而使主线程传入该子线程的第一类业务的javascript代码可以基于上述重定义后的全局对象属性或方法,在该作用域内执行。

以上技术方案中,一方面,由于第一类业务在业务平台主线程的子线程内执行,子线程中的全局对象属性或方法的修改不会影响业务平台主线程中的全局对象属性或方法,因此实现了与主线程的隔离,保证执行第一类业务时主线程全局对象的安全性;

另一方面,由于上述第一类业务在第一作用域内被执行的过程,基于被重定义后的全局对象属性或方法完成,因此,上述对不涉及敏感权限的全局对象属性或方法的重定义可以进一步限制第一类业务在执行过程中的行为,提高业务执行的安全性。

下面通过具体实施例并结合具体的应用场景对技术方案进行描述。

请参考图2,图2是本公开一实施例提供的一种业务执行方法的流程图,该方法可以包括以下步骤:

s201,从业务平台的主线程中获取不涉及敏感权限的第一类业务;

s202,将所述第一类业务传递至所述主线程的子线程中;其中,所述子线程的第一作用域内包含重定义后的、不涉及敏感权限的全局对象属性或方法;

s203,在所述子线程的所述第一作用域内,基于所述重定义后的、不涉及敏感权限全局对象属性或方法,执行所述第一类业务。

上述业务,可以包括任意使用计算机软件代码完成的业务;其中,上述第一类业务,可以包括如前所述的合作开发模式中第三方开发者提供的、可以被上述业务平台引用的用户代码对应的业务;上述主线程则可以包括上述业务平台的主线程。

可以理解的是,上述业务既可以由在开发阶段使用的高级编程语言代码作为载体,也可以由编译中产生的汇编代码乃至执行阶段中实际执行的二进制机器码作为载体;也就是说,执行业务的过程是广义上的,既可以指执行业务对应的机器码的过程,也可以指包括解释、编译、取指令、执行指令等环节在内的完整执行过程。由于不同编程语言采用的执行机制可能存在不同,因此本领域技术人员可以根据具体使用的编程语言,对本公开所提供的方案加以实现,本公开无需进行全部列举。

通常,现代应用程序可以通过多线程机制,改善整体处理性能;例如可以使用主线程与用户保持交互,使用多个子线程完成后台计算业务,也可以使用主线程调控多个子线程实现负载均衡;在本示例中,子线程则可以作为安全沙箱,用于执行特定的待执行业务。如果上述方案以javascript编程语言为实现,则上述子线程可以是基于webworker产生的子线程。通常,javascript为了保证展示给用户的dom(documentobjectmodel,文档对象模型)的稳定,通常是单线程的,但webworker则可以为javascript引入多线程的特性;webworker则允许开发人员编写能够长时间运行而不被用户所中断的后台程序,并同时保证页面对用户的响应;换言之,webworker可以允许javascript创建多个线程,但是子线程完全受主线程控制,且不得操作dom,该机制可以使得javascript开发的网页业务平台既能够保持与用户的前台互动,又可以在后台安全执行待执行的业务。

当然可以理解的是,除javascript以外,在其他支持多线程的编程语言中,亦可以对应实现上述方案,本公开无需进一步限定。上述全局对象属性或方法,可以包括执行上述业务的环境中的全局对象所具有的属性以及提供的方法;一般而言,在软件开发过程中,部分方法或变量可以被配置为全局对象方法或属性,方便软件进行全局调用;可以理解的是,虽然全局对象一般指纯面向对象开发语言中预定义的对象,但在非严格的面向对象编程语言中,直接定义的全局变量、全局函数也可以采用与上述全局对象属性或方法相同方式进行保护。

通常来说,一段程序代码中所用到的属性名和方法名不总是有效和可用的,而限定其可用性的代码范围就是作用域;在变量作用域机制下,即使变量、对象或者接口出现重名现象,也可以根据所属的作用域不同进行区分;上述第一作用域,可以是上述子线程中建立的任意作用域。

在本示例中,可以首先从业务平台的主线程中获取第一类业务。具体而言,上述第一类业务具体可以包括任意不涉及敏感权限的业务;在实现时,既可以通过代码检查的方式,检查获取到的业务所涉及的权限,进而保证获取的业务是不涉及敏感权限的第一类业务,也可以通过白名单的方式,将通过特定可信渠道提交的业务均视为不涉及敏感权限的第一类业务。

在一实施例中,上述业务平台中可以预设与不涉及敏感权限的第一类业务相对应的第一业务接口;在获取上述第一类业务阶段,可以通过该第一业务接口接收携带待执行的第一类业务的标识的第一业务指令,再从与上述主线程相关联的存储区域中,获取与上述第一业务指令携带的标识对应的、待执行的第一类业务;其中,上述与第一类业务相对应的第一业务接口,可以指专用于接收用于请求执行第一类业务的业务指令的接口;上述与主线程相关联的存储区域,可以是上述主线程可访问的关系数据库、图数据库、对象存储服务等等任意形式的存储区域。

举例而言,假设上述业务平台是一个在线的微应用测试平台,用户可以将待测试的微应用代码上传到上述平台可访问的数据库中,该测试平台可以通过预设的第一业务接口接收上述用户的微应用测试指令,并根据该指令中携带的标识从上述数据库中获取到待测试的微应用代码作为上述第一业务。

可以理解的是,上述第一业务接口可以包含权限控制相关的逻辑;例如,基于微应用测试指令发起方的身份标识,可以确定该发起方是可信任的不涉及敏感权限的软件开发者,进而可以间接确定上述作为第一类业务的待测试的微应用中不涉及敏感权限。又或者,上述第一业务接口可以仅在通过签名认证等其他途径确认上述发起方是可信任的不涉及敏感权限的软件开发者的前提下,开放给上述发起方。

应用上述方案,由于第一类业务可以预先上传到与主线程相关联的存储区域中,通过业务执行指令进行调用时无需等待第一类业务的上传过程,因此可以显著提升响应速度,并提高第一类业务的复用性。

亦可以理解的是,除上述获取第一类业务的方式之外,还可以采用其他的方式获取第一类业务,例如,在上述业务平台是基于网页的平台的情况下,可以直接通过页面文本框等方式获取到用户输入的第一类业务的代码,还可以响应于用户的指令,直接将预设的示例业务作为上述第一类业务,等等。

在一实施例中,在上述步骤s201从业务平台的主线程中获取不涉及敏感权限的第一类业务之前,可以首先进行新建主线程的子线程,和对变量作用域的配置;具体而言,可以首先新建主线程的子线程,再在该子线程中根据需求配置上述第一作用域;可以理解的是,上述第一作用域具体的建立、配置方法,可以视软件开发语言而定;

以javascript语言为例,该语言中定义有eval()函数,该函数用于计算某个字符串,并执行其中的javascript代码;由于该javascript中的eval()函数可以被赋值给变量,并将所处的变量作用域一同赋值;因此,在javascript语言中,可以通过灵活使用eval()函数,构建范围不同的变量作用域。

举例而言,针对下列示例代码:

由于上述evalg是一个赋值为eval函数的全局变量,因此执行evalg("alert(x)")时,取的x是值为1的全局变量x,因此会返回1;而上述eval("alert(x)")则由于具有局部作用域,因此其调用的x是局部作用域中值为3的x,故而返回3。此外,基于不同的javascript以及浏览器版本,全局eval的实现方式也可以存在不同,例如globaleval()函数,window.eval()函数,等等。

可见,通过配置变量(对象)作用域的方式,就可以控制业务执行过程中所能够访问、改写的变量(对象),以对需要保护的全局对象形成隔离。可以理解的是,本公开中形成隔离的关键技术为变量作用域以及多线程机制,因此,支持上述变量作用域以及多线程机制的编程语言均可以对应实现上述技术方案,本公开无需进行全部列举。

在一实施例中,还可以在上述第一作用域中,对全局对象属性或者方法进行重定义;具体而言,可以在该子线程的第一作用域内重新定义不涉及敏感权限的全局对象属性或方法;举例而言,如果全局对象提供了某种特殊的排序算法的方法实现,不涉及敏感权限,可供上述第一类业务调用,则可以在该第一作用域中对该排序算法对应的方法实现进行重定义,以在执行上述第一类业务时,调用的是重定义后的上述排序算法对应的全局对象方法,而不是重定义之前的全局对象方法,因而不会对全局对象产生破坏或者篡改。

在一实施例中,上述被重新定义的、不涉及敏感权限的全局对象属性或方法可以被设置为只读属性;例如,用于子线程与主线程信息交流的全局对象方法一旦被修改或者删除,子线程将无法与主线程进行正常的信息交流,因此,可以在软件开发阶段,将上述方法配置为只读属性,令第一类业务在执行时只能够调用上述方法,但不能随意将上述方法删除或者改写,从而保证上述子线程环境的稳定性。

也就是说,由于对第一类业务而言,被设置为只读属性的属性或方法可以调用,但无法修改或者删除,因此应用上述手段,可以利用只读属性来进一步保护上述重定义后的全局对象属性或方法。

在本示例中,在获取到上述第一类业务之后,可以将上述第一类业务传递至上述主线程的子线程中;其中,上述子线程的第一作用域内可以包含如前所述重定义后的、不涉及敏感权限的全局对象属性或方法。具体而言,上述第一类业务对应的执行代码可以在软件开发阶段即提交进整体的软件代码中,也可以在作为平台的应用程序开始运行并完成了上述子线程的新建,以及对应作用域的配置后,动态地通过线程之间的信息交流渠道,在主线程执行期间动态地将第一类业务对应的执行代码输入到上述子线程的第一作用域中进行执行。

在一实施例中,上述将第一类业务传递至上述主线程的子线程的过程,可以通过线程之间的消息机制实现。具体而言,可以在上述主线程中生成携带上述第一类业务的消息,再将上述消息传递至上述主线程的子线程中;上述子线程即可基于预设的监听接口获取到上述消息,并从上述消息中解析得到上述第一类业务;经过上述过程,也就实现了通过线程之间的消息机制,将第一类业务从主线程传递至子线程。

在诸如javascript的开发语言中,主线程与子线程不处于同一个上下文环境,无法直接访问对方的变量;在这种情况下,使用上述方案可以通过线程之间的消息机制实现主线程与子线程的信息沟通,从而将主线程中获取到的第一类业务传递至子线程中。继续以javascript开发语言为例,上述消息可以是javascript内置的message消息,主线程可以通过postmessage()方法将生成的携带上述第一类业务的message消息发送至子线程,子线程则可以通过addeventlistener()方法监听上述消息,并从中获取到上述第一类业务。

在本示例中,在将上述第一类业务传递至上述子线程后,可以在该子线程的上述第一作用域内,基于上述重定义后的、不涉及敏感权限全局对象属性或方法,执行上述第一类业务。继续以javascript编写的网页业务平台为例,在上述第一类业务被传递至基于webworker生成的子线程后,该子线程可以通过在eval()方法的参数中引用上述第一类业务的方式,在该eval()方法创建出的作用域内执行上述第一类业务。可以理解的是,除javascript的eval()方法以外,java语言中的scriptenginemanager类、c++调用lua脚本等方式均可以用于执行上述第一类业务,上述基于javascript的方案仅为便于描述的一示例,并不能限制本公开,本领域技术人员可以将上述方案应用到具有类似特性的其他软件开发环境和语言中,本公开无需详细限定。

在上述方案基础上,还可以借助软件的变量定义域机制,实现权限层级更加细化的业务执行。例如,全局作用域可以包括可用范围为全局的作用域;局部作用域,可以包括可用范围为局部的作用域,例如函数作用域等等;而由于局部作用域中的代码只能在该局部作用域中生效,无法被该局部作用域以外的代码访问,因此可以起到保护、隔离的作用。

在一实施例中,上述第一作用域内还可以建立有第二作用域,该第二作用域内可以包含重定义后的、涉及敏感权限的全局对象属性或方法;由于上述第二作用域处于第一作用域之内,因此第二作用域可以是上述子线程中的一个局部作用域,而第一作用域则既可以是上述子线程的一个包含前述第二作用域的局部作用域,也可以是全局作用域。

如前所述,在多个作用域相互嵌套的情况下,外层作用域中定义的属性或方法可以被内层执行的代码访问,但内层作用域中定义的属性或方法对外层执行的代码是不可见的;因此,由于涉及敏感权限的全局对象属性或方法在上述第二作用域内被重定义,在上述第一作用域内执行的第一类业务将无法访问到上述将涉及敏感权限的全局对象属性或方法,因而实现了对第一类业务的访问控制。

例如,上述全局对象提供了a、b、c三个方法,其中,假设方法c涉及敏感信息,而方法a与b不涉及;出于信息安全考虑应禁止用户代码调用上述方法c,但又需要保证用户代码可以调用上述方法a与b,因而可以在上述局部作用域内重新定义上述方法c,并在上述全局作用域内重新定义上述方法a与b;由于变量作用域机制的存在,对于不在上述局部作用域中的代码而言,上述方法a与b为可见、可用的方法,但上述方法c即为一不可见、不可用的方法,也就无法对其进行调用,从而可以保护敏感信息的安全。

与前述获取以及执行第一类业务的流程类似,还可以通过业务平台的主线程中与涉及敏感权限的第二类业务对应的第二业务接口,接收携带待执行的第二类业务的标识的第二业务执行指令,并进一步从与上述主线程相关联的存储区域中,获取与上述第二业务执行指令中携带的上述标识对应的上述第二类业务;之后,可以将上述第二类业务传递至上述子线程中,并在上述第二作用域内,基于上述重定义后的、涉及敏感权限的全局对象属性或方法,执行上述第二类业务。如前所述,应用作用域机制的性质,设计敏感权限的全局对象属性或方法只能由第二类业务进行访问,而第一类业务则无法获取到;因此通过作用域的嵌套设计,可以实现一个具有不同等级的权限管理功能的“沙箱”。

例如,请参见图3,图3是根据本公开的实施例示出的一种代码的结构示意图;在该示例中,第一作用域可以是全局作用域,而第二作用域则可以是该全局作用域内部的一个局部作用域,图中带箭头的线条可以指代程序运行的逻辑顺序;首先,可以启动主线程,并新建独立于主线程、但可以与主线程并行的子线程;在该子线程中配置有全局作用域和局部作用域,也即上述第一作用域和第二作用域;在上述全局作用域中执行上述第一类业务时,由于局部作用域对第一类业务不可见,因此第一类业务对应的代码无法调用在局部作用域中被重新定义的涉及敏感权限的全局对象属性或方法,所以可以保证子线程作为一个“沙箱”的安全性。

可以理解的是,基于上述全局作用域与局部作用域的特性,可以在上述方案基础上进一步开发设计不同权限等级的扩展功能。

举例来说,如果上述平台性质的软件的开发者希望在上述子线程中添加部分涉及安全管理的功能,但需要与用户代码相隔离,就可以将上述涉及安全管理的功能作为第二类业务,在上述第二作用域内基于重定义后的全局对象属性或方法执行;在实现时,用于接收不同类别业务的执行指令的业务接口可以分别提供给不同类别的用户;例如,对于普通用户可以对其开放上述第一业务接口,而对于平台管理员则可以对其开放上述第二业务接口。当然,除了针对不同用户开放不同的接口以外,还可以设计可以对业务实现自动分流的统一接口;具体而言,上述分流可以基于业务携带的业务类型标识实现,也可以基于业务发起方的权限等级标识实现。本领域技术人员可以自行完成具体软件设计,本公开不作进一步限定。

应用上述方案,由于第二作用域中执行的第二类业务可以引用在第二作用域中被重定义的、涉及敏感权限的全局对象属性或方法,而且不会被在第一作用域中执行的用户代码干扰;因此,可以进一步为上述软件环境提供不同权限等级的扩展功能。

当然可以理解的是,上述第二作用域以及第二类业务是对上述“沙箱”的进一步扩展,并不是“沙箱”的必要组成部分;举例而言,部分第一类业务采用上述方案实质上是为了借助多线程机制加快业务进度,其并不需要平台管理人员借助第二类业务对其进行特殊的监督和控制,因此仅保留上述第一作用域相关的设计,用于安全执行上述第一类业务即可。

在一实施例中,上述第一类业务被执行完毕后,生成的执行结果可以从上述子线程传递至上述主线程,以使上述主线程进一步将上述执行结果返回给上述第一类业务对应的业务发起方。由前述内容可知,上述子线程可以为用户代码提供一个类似“沙箱”的安全运行环境,因此其执行结果可以返回到上述主线程中进行输出。举例而言,如果上述第一类业务是一笔消费记录查询业务,具体用于从用户张三的消费记录表中筛选出单笔交易额高于500元的消费记录,那么筛选出的满足条件的消费记录即可作为上述执行结果从上述子线程传递至主线程,并进一步返回给该消费记录查询业务的发起方。当然可以理解的是,并非所有业务均需要返回执行结果,例如,对于信息推送业务而言,推送是否抵达、已读并不一定需要返回给发起该信息推送业务的发起者。

应用上述方案,可以进一步利用线程之间的通信机制,使业务的发起者能够更加明确地获知第一类业务的执行结果,实现了对需要返回结果的业务的更完整的功能支持。

可以理解的是,子线程向主线程传递上述执行结果的具体方式,与前述主线程向子线程传递业务的过程类似,可以基于线程之间的消息机制完成;并且,上述第二类业务也可以采用类似的方式,将业务执行的结果传递至主线程,并进一步将该第二类业务的执行结果返回给该第二类业务对应的业务发起方,例如管理员等等。

上述内容即为本公开针对所述业务执行方法的全部实施例。本公开还提供了对应的业务执行装置的实施例如下:

请参见图4,图4是根据本公开的实施例示出的一种业务执行装置的示意框图;该装置可以包括下列模块:

第一获取模块401,被配置为从业务平台的主线程中获取不涉及敏感权限的第一类业务;

第一传递模块402,被配置为将所述第一类业务传递至所述主线程的子线程中;其中,所述子线程的第一作用域内包含重定义后的、不涉及敏感权限的全局对象属性或方法;

第一执行模块403,被配置为在所述子线程的所述第一作用域内,基于所述重定义后的、不涉及敏感权限全局对象属性或方法,执行所述第一类业务。

在一实施例中,上述被重新定义的、不涉及敏感权限的全局对象属性或方法可以被设置为只读属性;例如,用于子线程与主线程信息交流的全局对象方法一旦被修改或者删除,子线程将无法与主线程进行正常的信息交流,因此,可以在软件开发阶段,将上述方法配置为只读属性,令第一类业务在执行时只能够调用上述方法,但不能随意将上述方法删除或者改写,从而保证上述子线程环境的稳定性。

也就是说,由于对第一类业务而言,被设置为只读属性的属性或方法可以调用,但无法修改或者删除,因此应用上述手段,可以利用只读属性来进一步保护上述重定义后的全局对象属性或方法。

在一实施例中,上述业务平台中可以预设与不涉及敏感权限的第一类业务相对应的第一业务接口;上述第一获取模块401可以进一步被配置为,通过该第一业务接口接收携带待执行的第一类业务的标识的第一业务指令,再从与上述主线程相关联的存储区域中,获取与上述第一业务指令携带的标识对应的、待执行的第一类业务;其中,上述与第一类业务相对应的第一业务接口,可以指专用于接收用于请求执行第一类业务的业务指令的接口;上述与主线程相关联的存储区域,可以是上述主线程可访问的关系数据库、图数据库、对象存储服务等等任意形式的存储区域。

应用上述方案,由于第一类业务可以预先上传到与主线程相关联的存储区域中,通过业务执行指令进行调用时无需等待第一类业务的上传过程,因此可以显著提升响应速度,并提高第一类业务的复用性。

在一实施例中,上述第一作用域内还包括第二作用域;上述第二作用域内包含重定义后的、涉及敏感权限的全局对象属性或装置;由于上述第二作用域处于第一作用域之内,因此第二作用域可以是上述子线程中的一个局部作用域,而第一作用域则既可以是上述子线程的一个包含前述第二作用域的局部作用域,也可以是全局作用域。

在上述情况下,上述装置还可以包括第二获取模块、第二传递模块以及第二执行模块;其中,上述第二获取模块可以被配置为,通过业务平台的主线程中与涉及敏感权限的第二类业务对应的第二业务接口,接收第二业务执行指令;其中,上述第二业务执行指令中携带待执行的第二类业务的标识;从与上述主线程相关联的存储区域中,获取与上述第二业务执行指令中携带的上述标识对应的上述第二类业务;上述第二传递模块可以被配置为,将上述第二类业务传递至上述子线程中;上述第二执行模块可以被配置为,在上述第二作用域内,基于上述重定义后的、涉及敏感权限的全局对象属性或装置,执行上述第二类业务。

应用上述方案,由于第二作用域中执行的第二类业务可以引用在第二作用域中被重定义的、涉及敏感权限的全局对象属性或方法,而且不会被在第一作用域中执行的用户代码干扰;因此,可以进一步为上述软件环境提供不同权限等级的扩展功能。

在一实施例中,上述第一传递模块402,可以基于线程之间的消息机制实现。具体而言,上述第一传递模块402可以被配置为,在上述主线程中生成携带上述第一类业务的消息,再将上述消息传递至上述主线程的子线程中;上述子线程即可基于预设的监听接口获取到上述消息,并从上述消息中解析得到上述第一类业务;经过上述过程,也就实现了通过线程之间的消息机制,将第一类业务从主线程传递至子线程。

在诸如javascript的开发语言中,主线程与子线程不处于同一个上下文环境,无法直接访问对方的变量;在这种情况下,使用上述方案可以通过线程之间的消息机制实现主线程与子线程的信息沟通,从而将主线程中获取到的第一类业务传递至子线程中。继续以javascript开发语言为例,上述消息可以是javascript内置的message消息,主线程可以通过postmessage()方法将生成的携带上述第一类业务的message消息发送至子线程,子线程则可以通过addeventlistener()方法监听上述消息,并从中获取到上述第一类业务。

在一实施例中,上述装置还可以包括初始化模块,该模块可以被配置为,在从业务平台的主线程中获取不涉及敏感权限的第一类业务之前,新建上述业务平台主线程的子线程,并在上述子线程中建立上述第一作用域;在上述第一作用域内,对不涉及敏感权限的全局对象属性或装置进行重定义。可以理解的是,上述第一作用域具体的建立、配置方法,可以视软件开发语言而定;通过配置变量(对象)作用域的方式,就可以控制业务执行过程中所能够访问、改写的变量(对象),以对需要保护的全局对象形成隔离;支持上述变量作用域以及多线程机制的编程语言均可以对应实现上述技术方案,本公开无需进行全部列举。

在一实施例中,上述装置还可以包括结果返回模块,该模块可以被配置为将生成的执行结果从上述子线程传递至上述主线程,以使上述主线程进一步将上述执行结果返回给上述第一类业务对应的业务发起方。由前述内容可知,上述子线程可以为用户代码提供一个类似“沙箱”的安全运行环境,因此其执行结果可以返回到上述主线程中进行输出。

应用上述方案,可以进一步利用线程之间的通信机制,使业务的发起者能够更加明确地获知第一类业务的执行结果,实现了对需要返回结果的业务的更完整的功能支持。

关于上述实施例中的装置,其中各模块的具体实现方式,已经在描述对应方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本公开的实施例还提出一种电子设备,包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的基于业务平台的业务执行方法。

本公开的实施例还提出一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的基于业务平台的业务执行方法。

本公开的实施例还提出一种计算机程序产品,可以包括计算机程序/指令,上述计算机程序/指令被处理器执行时,可以实现上述任一实施例上述的基于业务平台的业务执行方法。

图5是根据本公开的实施例示出的一种电子设备的示意框图。参照图5,电子设备500可以包括以下一个或多个组件:处理组件502,存储器504,电源组件506,多媒体组件508,音频组件510,输入/输出(i/o)的接口512,传感器组件514,以及通信组件518。

处理组件502通常控制电子设备500的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件502可以包括一个或多个处理器520来执行指令,以完成上述基于业务平台的业务执行方法的全部或部分步骤。此外,处理组件502可以包括一个或多个模块,便于处理组件502和其他组件之间的交互。例如,处理组件502可以包括多媒体模块,以方便多媒体组件508和处理组件502之间的交互。

存储器504被配置为存储各种类型的数据以支持在电子设备500的操作。这些数据的示例包括用于在电子设备500上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器504可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。

电源组件506为电子设备500的各种组件提供电力。电源组件506可以包括电源管理系统,一个或多个电源,及其他与为电子设备500生成、管理和分配电力相关联的组件。

多媒体组件508包括在电子设备500和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件508包括一个前置摄像头和/或后置摄像头。当电子设备500处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的或具有焦距和光学变焦能力的光学透镜系统。

音频组件510被配置为输出和/或输入音频信号。例如,音频组件510包括一个麦克风(mic),当电子设备500处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器504或经由通信组件518发送。在一些实施例中,音频组件510还包括一个扬声器,用于输出音频信号。

i/o接口512为处理组件502和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件514包括一个或多个传感器,用于为电子设备500提供各个方面的状态评估。例如,传感器组件514可以检测到电子设备500的打开/关闭状态,组件的相对定位,例如所述组件为电子设备500的显示器和小键盘,传感器组件514还可以检测电子设备500或电子设备500一个组件的位置改变,用户与电子设备500接触的存在或不存在,电子设备500方位或加速/减速和电子设备500的温度变化。传感器组件514可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件514还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件514还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件518被配置为便于电子设备500和其他设备之间有线或无线方式的通信。电子设备500可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件518经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件518还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。

在本公开一实施例中,电子设备500可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述基于业务平台的业务执行方法。

在本公开一实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器504,上述指令可由电子设备500的处理器520执行以完成上述基于业务平台的业务执行方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。

本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

需要说明的是,在本公开中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本公开实施例所提供的方法和装置进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1