发明内容
为解决上述问题,根据本发明的一个实施例,提供一种Cookie本地存储方法,所述方法包括:
步骤1)、解析本地存储的浏览器Cookie文件,得到一个或多个未被替换的键值对;
步骤2)、对于所述一个或多个未被替换的键值对中的每个键值对,在所述浏览器Cookie文件中用唯一字符串替换该键值对中的值。
在一个实施例中,所述方法还包括:
步骤3)、对于替换后的键值对,将该键值对中的键和替换前的值、该键值对所对应的生效域名网址,以及用于替换值的唯一字符串写入安全Cookie文件中的一条记录,并对该安全Cookie文件进行绑定加密;其中,所述安全Cookie文件用于记录替换后的键值对的相关信息。
在一个实施例中,在步骤3)中,调用TPM设备使用绑定密钥对所述安全Cookie文件进行绑定加密。
在一个实施例中,步骤1)包括:
解析出本地存储的浏览器Cookie文件中记录的所有键值对及其对应的生效域名网址,并且解封安全Cookie文件;
对于解析出的所有键值对中的每个键值对,如果在所述安全Cookie文件中不存在包括该键值对中的键和值以及该键值对所对应的生效域名网址的记录,则该键值对是未被替换的键值对。
在一个实施例中,解析本地存储的浏览器Cookie文件包括:根据浏览器的类型确定浏览器Cookie文件的存储格式,基于该存储格式解析本地存储的浏览器Cookie文件。
在一个实施例中,所述唯一字符串是调用TPM设备随机生成的字符串。
在一个实施例中,步骤2)之后还包括:如果到达下一个预定时间,则返回步骤1)进行处理。
根据本发明的一个实施例,还提供一种Cookie的使用方法,其中本地存储的Cookie中的键值对中的值已由唯一字符串替换,且替换后的键值对的相关信息记录在安全Cookie文件中;所述方法包括:
步骤A)、在浏览器发出对目标网站的访问请求前,截获要发出的请求,并且在所述请求中查找Cookie字段;
步骤B)、对于从中找到Cookie字段的请求,从所述请求中解析出唯一字符串,用其对应的值替换所述唯一字符串;
步骤C)、由浏览器发出所述请求。
在一个实施例中,步骤B)包括:
步骤B1)、对于从中找到Cookie字段的请求,从所述请求中解析出唯一字符串;
步骤B2)、解封安全Cookie文件,在所述安全Cookie文件中查找所述唯一字符串对应的值;以及
步骤B3)、如果找到所述对应的值,则用所述对应的值替换所述唯一字符串。
在一个实施例中,步骤B1)还包括:从所述请求中解析出要访问的网址;对于所述要访问的网址请求用户授权;如果得到授权,则执行步骤B2);如果没有得到授权,则执行步骤C)。
在进一步的实施例中,在步骤B1)中,请求用户授权包括:请求用户提交用于解封所述安全Cookie文件的绑定密钥。
在一个实施例中,步骤A)包括:在浏览器发出对目标网站的访问请求前,且在用HTTPS协议对其加密前,截获要发出的请求。
本发明通过使用随机字符串替换技术和基于TPM的绑定加密操作来解决本地Cookie的明文保存问题,解除了Cookie与本地浏览器的紧耦合,防止了恶意用户对本地Cookie的盗取,从而可以安全地在本地存储与使用Cookie信息。此外,在浏览器发出访问请求前,尤其是在HTTPS协议加密前,截获请求并将随机字符串替换回真实的Cookie值,确保了用户对Cookie的正常使用,实现了对HTTPS加密协议的支持。由于本发明可以在不修改浏览器代码和当前Cookie协议的情况下实现上述效果,因此具有较高的兼容性。
具体实施方式
下面结合附图和具体实施方式对本发明加以说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如本领域普通技术人员所公知的,本地文件中存储的Cookie信息包括“Key=Value”键值对以及生效域名网址URL等数据,其中Key(键)和Value(值)的内容是由服务器产生的字符串,键和值之间由一个等号连接,每个键值对之间以一个分号隔开。Cookie的使用同样是按照键值对的方式,在HTTP请求中,本地浏览器会以字符串“Cookie”作为字段名,以键值对为字段值,向服务器提交本地保存的Cookie信息(参见图3)。
根据本发明的一个实施例,提供一种Cookie本地存储方法。概括而言,该存储方法将本地浏览器存储的原始Cookie文件中的Value(值)用随机字符串替换,并且将该替换所涉及的数据用本地基于硬件的TPM设备加密并保存。图4示出了用于实现该Cookie本地存储方法的一种客户端环境与Web服务器,其中,在客户端引入Cookie代理器来完成随机字符串的替换等工作。Cookie代理器还可以响应来自客户端浏览器的请求,为客户端浏览器使用Cookie提供安全的交互环境。在一个实施例中,Cookie代理器可以是在客户端运行的、独立于客户端浏览器以及TPM设备的应用程序。应理解,Cookie代理器还可以是用于实现Cookie本地存储方法的任何硬件或者软件和硬件的组合。
现参考图5,结合图4所示的Cookie代理器对Cookie本地存储方法展开详细描述:
步骤S501、执行Cookie代理器。
在第一次执行Cookie代理器时,用户还需要设置该Cookie代理器的初始运行参数。Cookie代理器的运行参数包括:浏览器Cookie文件(即原始Cookie文件)存储路径、浏览器类型、安全Cookie文件存储路径、以及TPM绑定密钥等。
在一个实施例中,可将Cookie代理器设置为根据浏览器Cookie文件存储路径定期地扫描浏览器Cookie文件,在每次扫描时替换浏览器Cookie文件中的Cookie信息并且执行基于TPM设备的绑定加密操作。
步骤S502、解析浏览器Cookie文件,获得Key-Value键值对。
Cookie代理器通过浏览器Cookie文件存储路径找到本地浏览器存储的浏览器Cookie文件,并且扫描该浏览器Cookie文件。在扫描过程中,根据用户设置的浏览器类型确定该浏览器Cookie文件的存储格式,并且基于该存储格式来解析浏览器Cookie文件,进而可以获得浏览器Cookie文件中的Key-Value键值对以及对应的生效域名网址URL。
在一个实施例中,可将解析得到的Key-Value键值对及其生效域名网址URL表示为<Key,Value,URL>的三元组形式。
如果没有解析得到任何Key-Value键值对,则不对浏览器Cookie文件进行以下处理。
步骤S503、判断解析获得的Key-Value键值对是否已经处理过(即已被替换过),对于没有处理过的Key-Value键值对,执行替换(进入步骤S504);而对于已经处理过的Key-Value键值对则不作处理,返回步骤S502继续扫描并解析浏览器Cookie文件。
在一个实施例中,要判断是否已经处理过某个Key-Value键值对,可根据步骤S501中设置的安全Cookie文件存储路径查找安全Cookie文件,该安全Cookie文件记录已替换过的Key-Value键值对的信息。可首先使用TPM绑定密钥来解封该安全Cookie文件,接着在该安全Cookie文件中查找是否存在一条记录包括当前Key-Value键值对的Key,Value以及对应的URL(生效域名网址),如果存在这样的一条记录,则可以判定该Key-Value键值对已被处理过,如果不存在这样的记录,则判定该Key-Value键值对还没有被处理过。
步骤S504、对于没有处理过的某个Key-Value键值对,用随机字符串替换其中的Value部分。
在一个实施例中,由Cookie代理器调用TPM设备来随机产生一个字符串,接着将Key-Value键值对中的Value部分替换为该随机产生的字符串。
应理解,除了随机生成一个字符串来替换Value部分,也可以指定一个唯一字符串来替换该Value部分。
步骤S505、判断本次扫描是否完成,如果未完成则返回步骤S502继续进行扫描和解析。
步骤S506、对于本次扫描所处理的所有Key-Value键值对,将其中替换后的Value部分写回浏览器Cookie文件,并且将每次替换所涉及的数据存储到安全Cookie文件。
将替换后的Value部分写回浏览器Cookie文件,即用生成的随机字符串来替换浏览器Cookie文件中对应的Value部分。在一个实施例中,可以先在浏览器Cookie文件中删除替换的Cookie信息,再将替换后的Cookie信息以相应的存储格式写回浏览器Cookie文件。在将每个替换所涉及的数据保存到已解封的安全Cookie文件之后,Cookie代理器还要调用TPM设备使用绑定密钥对该安全Cookie文件进行绑定加密。
尽管在本文中以TPM设备为例描述了安全Cookie文件的绑定加密操作,应理解,可用于执行文件加密的其他安全手段也适用于此。
在一个实施例中,在用随机字符串替换浏览器Cookie文件中对应的Value部分之后,可将该次替换所涉及的数据作为一条记录存储到已解封的安全Cookie文件中,安全Cookie文件可包括与多次替换相关的多条记录。其中,一条记录可包括某次替换所涉及的原始的Key-Value键值对、替换其Value部分的随机字符串RandomString,以及该键值对所对应的生效域名网址URL。因此,每条记录可表示为<Key,Value,RandomString,URL>的四元组的形式,也可以表示为其他形式。
如上文所述,安全Cookie文件还用于在步骤S503中判断是否处理过某个Key-Value键值对。例如,假定某个键值对的Key为Key1,Value为Value1,其对应的生效域名网址为URL1,则可以在安全Cookie文件中查找是否有一条记录完整出现过Key1,Value1,URL1,如果有这样的信息,则表示已经处理过该Key1-Value1键值对;如果没有这样的信息,则表示还没有处理过该Key1-Value1键值对。
步骤S507、当到达下一扫描时间,Cookie代理器重新扫描浏览器Cookie文件、重复以上过程S502-S506。
上文描述的Cookie本地存储方法将Cookie的有效值(即原始的Value)从浏览器Cookie文件中进行了剥离,其技术效果是在完全不修改当前浏览器的情况下,解除了Cookie这类敏感数据与浏览器的紧耦合。这样,即使有恶意插件或恶意Javascript代码在用户的浏览器中执行,其获得的Cookie信息也是由本地Cookie代理器替换后的对其毫无意义的“垃圾”值(即一个随机字符串)。同样,对于遭到本地恶意程序窃取的本地Cookie文件,其窃取到的也仅是对其无意义的“垃圾”值。
针对上文描述的Cookie本地存储方法,为确保用户对Cookie的正常使用,根据本发明的一个实施例,还提供一种基于该Cookie本地存储方法的Cookie使用方法。概括而言,该使用方法包括:在客户端浏览器发出HTTP\HTTPS请求前,将请求头及其中的Cookie字段进行修改,用真实的Value替换掉随机字符串,再将修改后的请求发送至远程Web服务器。再次参考图4,可以在客户端引入Cookie代理器插件来修改HTTP\HTTPS请求中的Cookie字段。该Cookie代理器插件可以是运行在客户端浏览器中的插件,其监听客户端浏览器发出的HTTP\HTTPS请求,当监听到该请求后与本地Cookie代理器进行通讯,进而对请求中相应的Cookie字段进行修改,以确保用户能够正常使用Cookie。
现参考图6,提供一种基于上述Cookie本地存储方法的Cookie使用方法,包括以下步骤:
步骤S601、Cookie代理器插件截获浏览器即将发出的HTTP\HTTPS请求,并且查找Cookie字段。
其中,由于Cookie代理器插件可以在浏览器内部进行截获,因此可以获得HTTPS协议加密前的请求。此外,Cookie代理器插件还要在请求的头部(或称请求头)中查找是否出现了Cookie字段,如果没有出现Cookie字段则说明目标网站没有在本地存储Cookie信息,则无需执行任何操作,直接将该请求交由浏览器发出,如果出现Cookie字段,则执行步骤S602。
步骤S602、从请求的头部解析出Cookie信息,获得随机字符串RandomString以及要访问的网址URL,随后Cookie代理器插件向Cookie代理器发出通讯请求,查找之前用该随机字符串替换的真实Cookie。
在一个实施例中,可以以<Key,RandomString,URL>的三元组格式解析出所有的Cookie信息,其中RandomString是当前Cookie字段中“Key=Value”中的Value部分。接着,Cookie代理器插件向Cookie代理器发出的请求,该请求包括三元组<Key,RandomString,URL>。
步骤S603、Cookie代理器接收到由Cookie代理器插件发出的通讯请求后,从该请求中得到Cookie代理器插件请求的随机字符串RandomString和URL,然后提示用户授权。
在一个实施例中,可向用户弹出对话框并且提供要访问的网站URL来请求用户授权,用户可以根据URL判断是否授权。如果用户授权通过,则可以向Cookie代理器提供相关的TPM绑定密钥。Cookie代理器从用户处得到相关的TPM绑定密钥后,使用该密钥解封安全Cookie文件,在该安全Cookie文件中查找RandomString所对应的真实Value。如果找到,则将该真实Value返回给Cookie代理器插件,执行步骤S604。如果用户没有授权或者没有找到真实的Value值,则不对Cookie字段进行修改且由本地浏览器直接发送该请求。
步骤S604、Cookie代理器插件接收到Cookie代理器返回的真实Value,用返回的真实Value替换HTTP/HTTPS请求头中Cookie字段中的对应的随机字符串。最后将修改后的请求头交由浏览器发出。
Cookie代理器插件通过将随机字符串替换回对应的真实Cookie,保证了用户对Cookie的正常使用。此外,可以在HTTPS请求加密前,就对其中的Cookie字段的随机字符串进行替换,完成替换操作后再由浏览器完成该HTTPS请求的加密,从而实现了对HTTPS加密协议的支持。
尽管在上文中以特定顺序描述了本发明提供的Cookie本地存储方法和使用方法,但不应将此理解为要求按照所示的特定顺序或先后顺序来执行以上操作,或者要求执行所有的操作。
下面以配备有符合TCG组织标准规范1.2版本以上的TPM可信平台模块的客户端为例,具体描述本发明提供的Cookie本地存储方法与使用方法。本示例中,客户端运行有支持Cookie和插件扩展的现代浏览器。客户端上运行有上述Cookie代理器,同时客户端浏览器中安装有上述Cookie代理器插件。
其中,Cookie的本地存储步骤包括:
步骤1.1,用户首先执行Cookie代理器,在用户第一次执行Cookie代理器时,设定以下初始运行参数:
(1)、Cookie代理器自动扫描频率,下文中将该参数记为UpdateRate(其类型为整数,单位默认为秒。例如:30);
(2)、浏览器Cookie文件存储路径,下文中将该参数记为CookiePath(类型为字符串。例如,针对Chrome浏览器该路径可设置为:“%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cookies”);
(3)、本地浏览器标识,以下将该参数记为BrowserID(值为字符串,指示当前使用的浏览器类型。例如:“IE”等);
(4)、绑定密钥,下文中将该参数记为KeyBind(类型为字符串,其是调用TPM设备加密或解封时所用的密钥。例如,“1234567890abcdefg*&^%$”等)。
(5)、安全Cookie文件存储路径,下文中将该参数记为SecureCookieFile(类型为字符串,指示Cookie代理器存储真实Cookie信息的位置。例如:“C:\SecureCookieFile.dat”等)。其中,安全Cookie文件的存储格式可以是包括键,真实值,随机字符串和对应URL的四元组,即<Key,Value,RandomString,URL>。该文件在用户指定存储路径后,由Cookie代理器产生、使用和删改。
步骤1.2,Cookie代理器根据CookiePath参数,找到浏览器Cookie文件。根据BrowserID,确定该浏览器Cookie文件的存储格式并解析该浏览器Cookie文件。其中,解析出该文件中记录的Key-Value键值对以及其生效域名网址URL1。将解析所得的信息记为一个三元组<Key1,Value1,URL1>,该三元组的语义为:键Key1对应的值为Value1,其生效域名为URL1。
步骤1.3,Cookie代理器对于从步骤1.2解析得到的每一个三元组<Key1,Value1,URL1>,查询SecureCookieFile文件。若发现解析得到的三元组在安全Cookie文件的一条记录中完整出现,即在SecureCookieFile中存在一个四元组<Key2,Value2,RandomString2,URL2>,其中Key2等于Key1,Vaue2等于Value1,URL2等于URL1,则认为该三元组已经被Cookie代理器处理过,因此跳过该三元组,回到步骤1.2,获取一组新的三元组进行处理。
如果该三元组没有完整出现在SecureCookieFile的一条记录中,则进入步骤1.4。
如果步骤1.2得到的三元组为空,说明已经处理完所有Cookie键值对,则进入步骤1.7。
步骤1.4,Cookie代理器调用TPM设备,生成一个至少有512bit长的随机字符串RandomString1。之后可生成一个新的三元组<x,y,z>,其中x为步骤1.3中的三元组中的Key1,y为生成的随机字符串RandomString1,z为步骤1.3中的三元组中的URL1。
步骤1.5,Cookie代理器将步骤1.4生成的新的三元组<x,y,z>按照BrowserID指示的浏览器的Cookie存储格式,写回到所述CookiePath指示的浏览器Cookie文件中。该写回过程要求先删除浏览器Cookie文件中原始存在的、在步骤1.2中解析得到的三元组<Key1,Value1,URL1>,这里通过先删除再写回的操作,实际完成了将Cookie记录中的Value1替换为RandomString1的操作。
重复以上步骤1.2-1.5,完成所有三元组的替换过程。
步骤1.6,Cookie代理器将步骤1.5中用来替换浏览器Cookie文件中的信息的三元组<x,y,z>,按照格式<x,Value1,y,z>写入到解封后的SecureCookieFile中。其中,Value1为步骤1.3中得到的原始值,其也等价于步骤1.5中被替换的值。重复该过程以写入与所有替换相关的四元组。然后调用本地TPM设备,使用KeyBind对SecureCookieFile进行绑定加密操作。
步骤1.7,Cookie代理器根据UpdateRate参数,每隔UpdateRate的时间就从步骤1.2开始重复执行以上步骤。
Cookie的使用步骤包括:
步骤2.1,客户端浏览器在用户请求下,发出对目标网站的访问请求。
步骤2.2,Cookie代理器插件在浏览器发出该次访问请求前,先截获即将发出的请求。在所述请求的头部中查找是否出现了Cookie字段。如果没有出现,则说明目标网站没有在本地存储Cookie信息,因此无需做任何操作,直接将该请求交由浏览器发出即可。若发现了Cookie字段,则执行步骤2.3。
步骤2.3,Cookie代理器插件从请求头以及Cookie字段中以<Key,RandomString1,URL1>的格式解析出所有的Cookie数据。其中Key和RandomString1分别是Cookie字段中“Key=Value”的Key与替换后的Value部分,URL是当前HTTP/HTTPS请求送往的目标地址。在前述步骤1.5中,浏览器Cookie记录中的Value已经被Cookie代理器替换为了RandomString1,因此本步骤中所读出的也会是RandomString1。之后Cookie代理器插件向本地Cookie代理器发出通讯请求,该请求附上解析出的三元组<Key,RandomString1,URL1>。
步骤2.4,Cookie代理器接收到来自Cookie代理器插件发出的通讯请求,解析出该请求中的Key、RandomString1与URL1。本地Cookie代理器首先向用户弹出对话框用于请求用户授权,该对话框提示用户当前浏览器需要访问的网址URL1,及其将会提交Cookie信息给该URL1。
步骤2.5,用户判断是否授权该次访问操作。
用户可根据URL1判断是否授权当前请求使用Cookie信息,如果用户确定当前请求实际不应该使用Cookie信息,则可拒绝授权(这里用户的默认设置可以为允许所有授权等)。若允许该次Cookie使用,则同时键入步骤1.1所确定的KeyBind值,该密钥将用于由Cookie代理器向TPM设备请求解封SecureCookieFile所记录的真实Cookie信息,在前述步骤中Cookie的初始化需要该值,但不一定需要保存该值。可以由用户保存该值,也可以选择由Cookie代理器记录该值后以后每次直接使用所记录的值。若不允许该次使用,则不需键入所述KeyBind值。
步骤2.6,Cookie代理器判断用户的授权结果。若用户允许所述请求,则使用该用户提交的KeyBind值解封SecureCookieFile的内容,并在SecureCookieFile文件中查找RandomString1所对应的Value1。该查找中所使用的RandomString1为步骤2.4提供给Cookie代理器的RandomString1值。若找到RandomString1所对应的Value1,则将找到的Value1返回给所述Cookie代理器插件。若没有找到或者用户拒绝该次请求,则向所述Cookie代理器插件返回错误信息。
步骤2.7,Cookie代理器插件接收本地Cookie代理器的返回信息。若所述返回信息为成功查找到对应的Value1,则使用返回的Value1替换上述HTTP\HTTPS请求头中Cookie字段中的对应“Key1=RandomString1”的RandomString部分。重复以上2.4-2.6步骤,直到替换完所有的“Key1=RandomString1”后再将所述新的请求头返回给浏览器,由浏览器发出所述请求。若接收到的Cookie代理器的返回结果为错误信息,则不对所述HTTP\HTTPS请求头中作任何修改,直接将所述请求头交由浏览器对外发送。
采用本发明所提供的Cookie本地存储方法和使用方法,可以防御恶意攻击者在用户客户端直接窃取或者利用恶意插件、代码来窃取用户Cookie的攻击。
应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。