具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的预防批量注册的方法的过程,该过程的执行主体可以是用于为用户注册的设备,比如网站的服务器、应用的服务器等。执行主体并不构成对本申请的限定。
图1中的过程具体可以包括以下步骤:
S101:接收终端发送的注册请求,所述注册请求中携带有待注册用户名和对应的待注册密码。
在本申请实施例中,终端包括但不限于:个人计算机、手机、平板电脑、智能手表、车载移动台等。
当用户想要针对执行主体进行注册时,可以通过终端开启执行主体对应的网站或应用,以及在网站或应用内打开注册表单,以填写待注册的信息,待注册的信息至少包括待注册用户名和对应的待注册密码,待注册的信息还可以包括待注册的邮箱地址、密码找回问题及答案、手机号码等信息。在表单中填写完待注册的信息后可以将表单向执行主体提交,提交注册表单操作即为:发送注册请求的操作。注册请求中携带有注册表单中用户填写的待注册的信息。
在本申请实施例中,针对用户填写的待注册的信息,需要进行一些基本校验,在基本校验全部通过后,可以执行步骤S102,而若基本校验未通过,可以提示用户修改待注册的信息或直接拒绝注册,则暂时无需执行步骤S102。这样的话,可以防止浪费执行主体的处理资源。基本校验主要可以分为以下两类:
第一类基本校验,校验用户填写的各项待注册的信息是否均符合预定的注册表单格式,若是,则校验通过,否则,校验不通过。该注册表单格式可以是由执行主体(一般作为后台)预定的,也可以是由对应于执行主体的前端预定的。
可以由前端在用户在注册表单中填写待注册的信息时,实时地执行第一类基本校验;或者,也可以等待用户提交注册表单后,再由执行主体(也即,对应于前端的后台)执行第一类基本校验。
第二类基本校验,需要由执行主体基于已注册数据(可以包括已注册用户名数据、已注册手机号码数据等)执行的一些基本校验。比如,校验待注册用户名是否已被注册过,一般地,用户名需满足唯一性,因此,若通过校验确定待注册用户名已被注册过,则校验不通过。
S102:根据所述待注册密码和保存的已注册密码数据,确定所述待注册密码在预定时间段内已被注册过的次数是否不小于预定阈值,所述预定阈值不小于1。
在本申请实施例中,由于批量注册通常有个特征:批量注册的各待注册密码都是相同的。因此,为了预防批量注册,在上述的基本校验通过的前提下,还可以进一步地针对注册请求携带的待注册密码进行校验(为了与基本校验相区分,将针对待注册密码进行的校验称为特殊校验)。特殊校验至少可以包括步骤S102。
特殊校验是基于保存的已注册密码数据执行的。已注册密码数据可以是各已注册密码本身(对应于明文保存密码的场景),也可以是通过对各已注册密码进行加密操作后生成的、可以间接反映各已注册密码的数据(对应于密文保存密码的场景)。
本申请对预定时间段并不做限定。一般地,预定时间段可以是从当前时刻往前追溯的一段时间,比如最近的一天、一周、一个月或一年等,在这种情况下,步骤S102中的已注册密码数据可以指预定时间段内的已注册密码数据。预定时间段也可以是当前时刻之前的所有时间,在这种情况下,步骤S102中的已注册密码数据可以指已保存的全部已注册密码数据。
在本申请实施例中,已注册密码数据可以保存在执行主体上,或者,可向执行主体传输数据的其他设备上。进一步地,本申请对用于保存已注册密码数据的存储介质并不做限定,其可以保存在缓存中,也可以保存在磁盘等其他存储介质中。例如,若预定时间段较短,则预定时间段内的已注册密码数据可能较少,则这些数据可以保存在用于保存注册密码数据的设备的缓存中,由于缓存的读写速度很快,因此,有利于提高本申请的方案的执行效率;而若预定时间段较长,则预定时间段内的注册密码数据可能较多,缓存的存储空间可能不足以保存这些数据,则这些数据可以保存在用于保存已注册密码数据的设备的磁盘中。本申请对缓存和磁盘存储空间的具体大小也不做限定,一般地,缓存存储空间要小于磁盘存储空间。
在本申请实施例中,在明文保存密码的场景下,已注册密码数据具体可以包括各已注册密码,则可以通过在已注册密码数据中查询待注册密码,确定该待注册密码在预定时间段内已被注册过的次数是否不小于设定阈值;而在密文保存密码的场景下,已注册密码数据具体可以包括对各已注册密码分别执行加密操作后生成的数据,则可以先对该待注册密码也执行该加密操作,再在已注册密码数据中查询执行加密操作后的待注册密码,以确定该待注册密码在预定时间段内已被注册过的次数是否不小于设定阈值。
在本申请实施例中,需要说明的是,在步骤S102中提到的“确定所述待注册密码在预定时间段内已被注册过的次数是否不小于预定阈值”并非是说待注册密码在预定时间段内肯定已被注册过,显然,待注册密码在预定时间段内也有可能未被注册过,也即,在步骤S102中确定出的次数为0。在具体实施时,步骤S102可以通过一次查询动作完成,也可以通过两次查询动作完成。对于后者,可以将步骤S102拆分为两个子步骤(每个子步骤分别包含一次查询动作)执行:
第一个子步骤:根据待注册密码和保存的已注册密码数据,确定待注册密码在预定时间段内是否已被注册过,若是,执行第二个子步骤,否则,可以对待注册密码和对应的待注册用户名进行注册,或者,对待注册密码进行更进一步的校验。
第二个子步骤:当确定待注册密码在预定时间段内已被注册过时,再进一步地确定已被注册的次数。
S103:当确定所述次数不小于所述预定阈值时,拒绝对所述待注册用户名和所述待注册密码进行注册。
在本申请实施例中,可以根据步骤S102对应的确定结果,决定是否对待注册用户名和待注册密码进行注册。
若确定结果为是,则可以推测出步骤S101中接收到的注册请求很有可能属于批量注册的请求,进而可以拒绝对待注册用户名和待注册密码进行注册,并可以提示用户更换更换待注册密码,从而可以降低批量注册的成功概率。
若确定结果为否,后续的处理方式可以不止一种。比如,可以对待注册用户名和待注册密码进行注册,也可以针对待注册密码进行更进一步的校验,在后一种情况下,特殊校验除了包括步骤S102以外,还包括了所述更进一步的校验,在后面会进行说明。
通过图1中的方法,根据批量注册的待注册密码通常都是相同的这个特征,可以在对注册请求携带的待注册用户名和对应的待注册密码进行注册前,判断该待注册密码在预定时间段(比如,最近一段时间)内是否已被注册过多次(具体数量取决于所述设定阈值),若是,则可以推测该注册请求很可能是批量注册的注册请求,进而拒绝对该待注册用户名和该待注册密码进行注册,这样的话,可以降低恶意批量注册的成功率,减小网站的安全风险,而且无需用户与服务器进行额外的交互,操作简便,效率较高,从而解决了现有技术中的问题。
为了便于理解,下面对图1中的步骤进一步地说明。
如前所述,由于批量注册的待注册密码通常都是相同的,因此,通过步骤S101~S103可以预防批量注册。但是,在实际应用中,还可能存在这种情况:某些批量注册的各待注册密码可能并非是完全相同的,而只是各待注册密码中部分内容是相同的,也即,各待注册密码只是相似的,例如,各待注册密码可能都是根据某个种子密码生成的,假定种子密码为“abcdef”,根据种子密码可以生成诸如“abcdef001”、“abcdef002”、“abcdef003”等待注册密码,可以看到,生成的各待注册密码中前三分之二部分的内容是相同的,都为“abcdef”,而后三分之一部分的内容互不相同。在这种情况下,执行步骤S102后确定出的次数可能小于预定阈值,进而不满足步骤S103的执行条件。
为了提高本申请的方案的可靠性以及扩大本申请的方案的适用范围,本申请实施例针对上述的情况提供了应对方案。具体地,在执行步骤S102后,当确定所述次数小于所述预定阈值时,可以根据所述待注册密码中的预定部分(所述预定部分少于完整的待注册密码)和所述已注册密码数据,判断所述预定部分在所述预定时间段内已被注册过的次数是否不小于所述预定阈值;若否,则拒绝对所述待注册用户名和所述待注册密码进行注册。
可以看到,在这种情况下,上面提到的特殊校验包括的所述更进一步的校验即为:确定待注册密码中的预定部分在预定时间段内已被注册过的次数是否不小于预定阈值。特殊校验执行完毕后,可以根据特殊校验的校验结果,确定是否拒绝对待注册用户名和待注册密码进行注册。
进一步地,若待注册密码以及待注册密码的预定部分在预定时间段内已被注册过的次数均小于所述预定阈值,可以认为该待注册密码对应的注册请求属于批量注册的注册请求的概率较小,因此,可以对待注册密码和对应的待注册用户名进行注册。
在本申请实施例中,预定部分可以是待注册密码中的前三分之二部分、或后二分之一部分,或中间的三分之一部分,等等,本申请对此并不做限定,可以根据实际需要预先设定。对于上例,假定指定部分为待注册密码中的前三分之二部分(也即,“abcdef”),由于上例中的批量注册的各待注册密码中的前三分之二部分都是相同的,因此,可以预防上例中的批量注册,在预定时间内,该批量注册最多只能注册预定阈值个待注册用户名和对应的待注册密码。
在本申请实施例中,在明文保存密码的场景下,已注册密码数据可以包括:预定时间段内的各已注册密码。则对于步骤S102,根据所述待注册密码和保存的已注册密码数据,确定所述待注册密码在预定时间段内已被注册过的次数是否不小于预定阈值,具体可以包括:在保存的预定时间端内的各已注册密码中查询以确定待注册密码的出现次数(该出现次数即为:该待注册密码在预定时间段内已被注册过的次数),判断该出现次数是否不小于预定阈值。
在实际应用中,由于明文保存密码容易导致密码从服务器侧泄露,因此,很少采用明文保存密码,通常会采用密文保存密码。进一步地,密文保存密码所述采用的加密方式通常为不可逆加密算法,这样的话,一旦加密,任何人也可无法将密文还原为原来的密码,从而可以防止密码从服务器侧泄露。以下主要基于密文保存密码的场景,继续说明本申请的方案。
对于相同的原始数据,采用相同的加密算法可以计算出的相同的密文,进而当确定两份密文相同时,可以确定两份密文对应的原始数据也是相同的。基于这样的原理,在密文保存密码的场景下,已注册密码数据可以包括:预定时间段内的、采用预定加密算法计算出的各已注册密码的密文。则对于步骤S102,根据所述待注册密码和保存的已注册密码数据,确定所述待注册密码在预定时间段内已被注册过的次数是否不小于预定阈值,具体可以包括:采用所述预定加密算法,计算所述待注册密码的密文;在采用预定加密算法计算出的各已注册密码的密文中,查询所述待注册密码的密文,其中,所述各已注册密码是在所述预定时间段内被注册的;根据查询结果,确定所述待注册密码在所述预定时间段内已被注册过的次数是否不小于预定阈值。
本申请对所述加密算法并不做限定。一般地,可以采用摘要算法作为所述加密算法,用于计算密码的密文,相应的,密文即为摘要。摘要算法包括但不限于:消息加密算法版本5(Message Digest Algorithm 5)、循环冗余校验(CyclicRedundancy Check,CRC)、安全哈希算法(Secure Hash Algorithm,SHA),等等。当然,除了摘要算法以外,诸如RAS加密、数据加密标准(Data EncryptionStandard,DES)加密其他加密算法也可以用于实施本申请的方案。
类似地,假定在执行步骤S102后,还需要判断预定部分在预定时间段内已被注册过的次数是否不小于预定阈值的话,也可以采用预定加密算法,计算该预定部分的密文,再通过在各已注册密码的密文中查询该预定部分的密文,确定该指定部分在预定时间段内已被注册过的次数是否不小于预定阈值。可以看到,对于待注册密码中的预定部分,由于可以采用本申请实施例中针对完整的待注册密码的处理方式,对该预定部分进行类似的处理,因此,以下主要针对完整的待注册密码说明本申请的方案,而不针对该指定部分赘述本申请的方案。
在本申请实施例中,可以通过调节预定阈值,调节针对批量注册的预防强度,预定阈值越高,可批量注册成功的用户名和密码的数量越多(一般地,该数量超过预定阈值后,后续的可批量注册的注册请求才可能被拒绝),因此,防御的强度反而越低。
在本申请实施例中,对于“根据查询结果,确定所述待注册密码在所述预定时间段内已被注册过的次数是否不小于预定阈值”的具体实施方案并不做限定。下面列举出处两种可行的实施方案作为示例。
不同的实施方案可以由已注册密码数据的保存格式决定。
对应于第一种实施方案的已注册密码数据的保存格式为:以键值对(key-value)的形式保存已注册密码数据,比如各已注册密码的密文,其中,每一个key是一个已注册密码的密文,该key对应的value可以是预定时间段内该已注册密码已被注册过的次数。每当新增一个已注册密码的密文时,可以判断是否存在该新增的已注册密码的密文的key,若是,则将该key对应的value加1(也即,预定时间段内该已注册密码已被注册过的次数增加了一次),否则,创建一个该新增的已注册密码的密文的key,并设置创建的key的value为1(也即,预定时间段内该已注册密码已被注册过1次)。
相应地,第一种实施方案为:对于某个待注册密码,假定在保存的上述各键值对中查询到该待注册密码的密文的key,则表示该待注册密码已被注册过,进而该key的value即为该待注册密码已被注册过的次数,而无需再次统计。由此可见,第一种实施方案有利于提高本申请的方案的执行效率。
对应于第二种实施方案的已注册密码数据的保存格式为:以键值对(key-value)的形式保存各已注册用户名,其中,每一个key是一个已注册用户名,该key对应的value可以是该已注册用户名对应的已注册密码的密文。每当新增一个已注册用户名时,创建该新增的已注册用户名的key,并设置创建的key的value为该已注册用户名对应的已注册密码的密文。
相应地,第二种实施方案为:对于某个待注册密码,假定在保存的上述各键值对中查询到该待注册密码的密文的value,则表示该待注册密码已被注册过,进而可以统计查询出的该value的出现次数,该出现次数即为该待注册密码已被注册过的次数。由此可见,第二种实施方案无需在数据表中增加额外的属性列(用于记录上述的次数的属性列),有利于降低本申请的方案的实施成本。
上面对图1中的步骤进一步地进行了说明。为了便于理解,本申请实施例还提供了预防批量注册的方法在实际应用中的一种具体实施过程,如图2所示。图2中的过程适用于预防各待注册密码相同的批量注册。
在图2中可以看到,用于为用户注册的设备可以通过注册系统和缓存为用户校验待注册密码。用户通过终端填写待注册的信息,并携带在注册请求中提交给注册系统,注册系统对待注册的信息进行基本校验,若基本校验不通过则可以拒绝注册并向用户提示,若基本校验通过,则可以计算待注册的信息中包含的待注册密码的密文,在缓存中保存的各已注册密码的密文中查询该待注册密码的密文的出现次数,若出现次数小于预定阈值(预定阈值不小于1),则将出现次数加1并为用户注册,若出现次数不小于预定阈值,则拒绝注册并向用户提示。
进一步地,本申请实施例还提供了预防批量注册的方法在实际应用中的另一种实施过程,如图3所示。图3中的过程适用于预防各待注册密码相同和/或相似的批量注册,显然,图3中的过程比图2中的过程的适用范围更广。
图3中的过程具体可以包括以下步骤:
S301:接收终端发送的注册请求,注册请求中携带有待注册用户名和对应的待注册密码。
S302:对待注册的信息进行基本校验,确定基本校验是否未通过,若是,则执行步骤S303,若否,则执行步骤S304。
S303:拒绝注册,并进行相应的提示。
S304:确定待注册密码在预定时间段内已被注册过的次数是否超过预定阈值,若是,则执行步骤S303,若否,则执行步骤S305。
S305:确定待注册密码中的预定部分在预定时间段内已被注册过的次数是否超过预定阈值,若是,则执行步骤S303,若否,则执行步骤S306。
S306:对待注册用户名和对应的待注册密码进行注册。
在本申请实施例中,以上提及的方案均是基于用户请求注册的场景进行说明的,在实际应用中,本申请的方案的发明思路还可以用于其他一些场景,比如用户请求修改已注册密码的场景,用户请求为尚未创建密码的用户名创建密码的场景,等等,在这些场景下,用户都需要向服务器提交密码,则服务器可以对用户提交的密码执行上述的特殊校验,并根据特殊校验结果,确定如何对用户提交的密码进行处理。
以修改已注册密码的场景作为示例进行说明。基于与本申请实施例提供的预防批量注册的方法同样的发明思路,本申请实施例还提供了一种针对密码修改请求的处理方法,该处理方法的过程如图4所示。
该处理方法的过程的执行主体可以是用于为用户修改密码的设备,该处理方法的过程具体可以包括以下步骤:
S401:接收终端发送的、用于请求将原有密码修改为新密码的密码修改请求,所述密码修改请求中携带有所述新密码。
S402:根据所述新密码和保存的修改后密码数据,确定所述新密码在预定时间段内的修改后密码数据中的出现次数是否不小于预定阈值,所述预定阈值不小于1。
在本申请实施例中,保存的修改后密码数据具体可以包括:为任意用户成功地将原有密码修改为新密码后,保存的各所述新密码。
S403:当确定所述次数不小于所述预定阈值时,拒绝将所述原有密码修改为所述新密码。
图4中的方法可以配合于图1中的方法使用,以提高图1中的方法的可靠性(具体地,可以减少用户修改密码的操作对其他用户注册过程的影响)。同时,图4中的方法还具有一些额外的有益效果,通过图4中的方法,可以使得用户难以将原有密码修改为在预定时间段内已多次被成功地用于密码修改过程的新密码,有利于提高用户的密码的安全性。
与图1中的步骤类似,在执行完步骤S402后,当确定所述次数小于所述预定阈值时,可以根据所述新密码中的预定部分和所述修改后密码数据,判断所述预定部分在所述预定时间段内的修改后密码数据中的出现次数是否不小于所述预定阈值;若否,则拒绝将所述原有密码修改为所述新密码。通过这个步骤,可以使得用户难以将原有密码修改为在预定时间段内已多次被成功地用于密码修改过程的新密码,以及使得用户难以将原有密码修改为与在预定时间段内成功地用于密码修改过程的新密码相似的密码,有利于进一步地提高用户的密码的安全性。
需要说明的是,假定各所述新密码不是被直接保存的,而是加密后再保存的,则保存的修改后密码数据具体可以包括:为任意用户成功地将原有密码修改为新密码后,保存的对各所述新密码采用预定加密算法进行加密后的数据。相应地,可以将步骤S402修改为:采用所述预定加密算法对所述新密码进行加密,确定对所述新密码加密后的数据在预定时间段内的修改后密码数据中的出现次数是否不小于预定阈值,所述预定阈值不小于1。
以上为本申请实施例提供的预防批量注册的方法和针对密码修改请求的处理方法,基于同样的发明思路,本申请实施例还提供相应的预防批量注册的装置和针对密码修改请求的处理装置,如图5、图6所示。
图5为本申请实施例提供的预防批量注册的装置结构示意图,具体包括:
接收模块501,用于接收终端发送的注册请求,所述注册请求中携带有待注册用户名和对应的待注册密码;
确定模块502,用于根据所述待注册密码和保存的已注册密码数据,确定所述待注册密码在预定时间段内已被注册过的次数是否不小于预定阈值,所述预定阈值不小于1;
拒绝模块503,用于当确定所述次数不小于所述预定阈值时,拒绝对所述待注册用户名和所述待注册密码进行注册。
所述拒绝模块503还用于:当确定所述次数小于所述预定阈值时,根据所述待注册密码中的预定部分和所述已注册密码数据,判断所述预定部分在所述预定时间段内已被注册过的次数是否不小于所述预定阈值;若否,则拒绝对所述待注册用户名和所述待注册密码进行注册。
所述已注册密码数据包括:各已注册密码,和/或采用预定加密算法计算出的各已注册密码的密文;其中,所述各已注册密码是在所述预定时间段内被注册的。
当所述已注册密码数据包括所述采用预定加密算法计算出的各已注册密码的密文时,所述确定模块502具体用于:采用所述预定加密算法,计算所述待注册密码的密文;在采用预定加密算法计算出的各已注册密码的密文中,查询所述待注册密码的密文,其中,所述各已注册密码是在所述预定时间段内被注册的;根据查询结果,确定所述待注册密码在所述预定时间段内已被注册过的次数是否不小于预定阈值。
所述加密算法包括用于计算摘要的算法,所述密文包括摘要。
具体的上述如图5所示的装置可以位于用于为用户注册的设备上。
通过图5中的装置,可以降低各待注册密码相同和/或相似的批量注册的成功率,减小网站的安全风险,而且无需用户与服务器进行额外的交互,从而解决了现有技术中的问题。
图6为本申请实施例提供的针对密码修改请求的处理装置结构示意图,具体包括:
接收模块601,用于接收终端发送的、用于请求将原有密码修改为新密码的密码修改请求,所述密码修改请求中携带有所述新密码;
确定模块602,用于根据所述新密码和保存的修改后密码数据,确定所述新密码在预定时间段内的修改后密码数据中的出现次数是否不小于预定阈值,所述预定阈值不小于1;
处理模块603,用于当确定所述次数不小于所述预定阈值时,拒绝将所述原有密码修改为所述新密码。
所述处理模块603还用于:当确定所述次数小于所述预定阈值时,根据所述新密码中的预定部分和所述已注册密码数据,判断所述预定部分在所述预定时间段内的修改后密码数据中的出现次数是否不小于所述预定阈值;若否,则拒绝将所述原有密码修改为所述新密码。
具体的上述如图6所示的装置可以位于用于为用户修改密码的设备上。
通过图6中的装置,可以提高用户修改后的密码的安全性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。