本发明属于身份验证技术领域,特别涉及一种单系统多平台身份验证方法。
背景技术:
在Web中包括了四种认证方式:Basic,Form,Digest,SSL:
1、Basic(HTTP 1.0提出)
客户端请求某个资源后,服务器会发送一个401(未授权)的响应,在响应中带了Realm信息表示使用Basic认证。
浏览器接收到这个响应后会弹出一个框,输入用户名和密码。点取消表示取消认证,点确定会提交用户名、密码到服务器。提交的方式是在HTTP头中加入:
WWW-Authorization:Basic XXXXXXX
Basic后面是用户名、密码的BASE64编码。在客户端编程中,这段内容的构造为:
String cre=userName+":"+password
Base64encode(cre);
add to request header with"WWW-Authroization"。
2、Form
Form就是在页面上以Form的形式提交数据,GET或POST.也可以使用AJAX来提交认证信息。
3、Digest(HTTP 1.1最基本)
为了防止重放攻击,采用摘要访问认证。客户发送一个请求后,收到一个401消息,消息中还包括一个唯一的字符串:nonce,每次请求都不一样。如,
HTTP/1.1 401Unauthorized
WWW-Authenticate:Digest
realm="xxxxxxx",
qop="auth,auth-int",
nonce="--base code--",
opaque="--base code--"
此时客户端将用户名、密码、nonce、HTTP Method和URI为校验值基础进行散列(默认为MD5)的摘要返回给服务器。响应头必须包括的5个部分:
realm:领域,不同领域可能密码不一样
nonce:挑战值
username:用户名
digest-uri:请求URI
response:摘要部分
服务器端则根据收到的信息加上存储的密码算出一个新的摘要与请求中的摘要比较,因为每次nonce都会变,就很难做到重放攻击了。
4、SSL
SSL协议位于TCP/IP和应用协议之间,基于公钥体制保证数据通讯的安全性。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
以上4种基础验证方式中最大的问题所在是只能从数据加密的层面和会话中维持身份的认证,但是无法同步各个不同平台间的系统内容。其次,无法识别用户的登录失败行为和会话失败流程究竟是由错误操作还是由攻击引起的。
技术实现要素:
本发明的目的在于克服现有技术的不足,提供一种不会在服务器上遗留客户信息,采用加密方式循环,修改字符、使用爬虫引擎撞库或者使用过期密文都会产生攻击警告,能有效降低使用缓存的风险和使用session会话引起的会话固定攻击风险,能够提高身份验证的效率和安全性的单系统多平台身份验证方法。
本发明的目的是通过以下技术方案来实现的:一种单系统多平台身份验证方法,包括以下步骤:
S1、服务器获取客户机登录时使用的用户名和用户密码,然后访问数据库查找该用户是否存在,若存在则为该用户提供密文,否则提示错误并要求客户机重新登录;
S2、服务器接收客户机发送的对于限制资源的访问请求,并接收用户提交的密文;
S3、服务器验证密文,验证成功后进入步骤S4,验证不成功则执行第一调整方案;
S4、服务器解析密文,根据请求访问的客户机信息查询相关字段内容,根据各客户机的协议内容决定当前操作是否存在错误,如果没有错误则进入步骤S5,否则执行第二调整方案;
S5、服务器返回允许客户机访问限制资源的回执,并重新加密密文,将加密完成的密文重新发送给客户机。
进一步地,所述步骤S1具体包括以下子步骤:
S11、服务器获取客户机登录时使用的用户名和用户密码,访问数据库查找该用户是否存在,若存在则执行步骤S12,否则提示错误并要求客户机重新登录;
S12、从数据库中提取该客户机对象,提取token字段,若token字段为空则执行步骤S13,否则执行步骤S14;
S13、使用put方法,将当前客户机的标识信息、当前时间戳、当前登录客户机的平台信息加入到一个字符串—字符串图中,将字符串—字符串图加密成密文,置入缓存;
S14、解析token字段,将token字段还原为明文,从请求登陆的报文的首部提取agent字段,作为键值访问指定字段,将其修改为指定内容;再修改LastLogin字段为当前时间戳;修改完后加密成密文,置入缓存;
S15、返回登录成功信息,将密文加入到返回报文的首部作为客户机请求访问闲置资源的密文凭证。
进一步地,所述步骤S13加密过程包括以下子步骤:
S131、获取客户机的设备类型,可以使用DeviceFamily命名空间中的内容获取,使用put方法加入字符串—字符串图SecretMap中,键值为:device;
S132、获取当前程序包被安装的时间,可以使用Package命名空间中的内容获取,使用put方法加入字符串—字符串图SecretMap中,键值为:install;
S133、获取系统时间,使用put方法加入字符串—字符串图SecretMap中,键值为:send;
S134、以JSON格式将字符串—字符串图SecretMap加密,使用的密语由程序开发时定义,由客户机和服务器硬编码保存。
进一步地,所述步骤S3中验证密文包括以下子步骤:
S31、服务器解析HTTP请求报文的头部信息,提取其中的验证协议约定字段,提取成功执行S32,否则执行S36;
S32、将提取到的验证协议约定字段进行解密,得到字符串-字符串图的结构,称其为StatusMap,提取HTTP请求报文中的客户机代理字段,依次获取客户机所处的平台;
S33、判断客户机使用的平台,若为web平台则执行步骤S331,若为非web平台则执行步骤S333;
S331、从StatusMap中提取web字段作为验证内容,分析是否出现协议内容错误,若协议内容无误则进行步骤S332;若协议内容有误则进行报错,并报告一次协议内容错误记录,然后执行步骤S34;
S332、判断协议内容与当前时间戳相比是否超时,如果出现超时则进行报错,并报告一次过时错误记录,然后执行步骤S34;若未超时则更新定时器,然后执行步骤S35;
S333、提取响应字段作为验证内容,按照各自协议内容维护持久登录信息,判断登陆信息是否验证成功,若验证成功则执行步骤S35;否则进行报错,并报告一次登陆错误记录,然后执行步骤S34;
S34、提示客户机错误信息,并要求重新登录;
S35、重新生成报文,并根据服务器与客户机的协议内容对报文进行加密,将新的报文加入服务器响应报文中的pretoken字段;
S36、无法提取验证协议约定字段或验证协议约定字段验证失败,意味着使用了过期协议报文,表示受到了会话固定的攻击方式,服务器产生攻击警告,并置入服务器日志;
S37、提取StatusMap中客户机身份信息内容,并将其作为业务逻辑中的令牌。
进一步地,所述步骤S3中的第一调整方案具体为:分析验证结果,查看是否存在密文语法错误,若存在则产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,并提示错误信息,要求客户机重新提供密文;
若不存在密文语法错误则检查HTTP报文段中的请求信息,分析报文中agent和IP地址是否源自危险客户源,如果是则产生攻击警告,并将信息输出到日志中,然后要求客户重新提供密文;否则提示错误信息,要求客户端重新提供密文。
进一步地,所述步骤S4中解析密文包括以下子步骤:
S41、接收客户机发送的访问请求报文和密文,获取报文和密文接收到的时间戳,记为current;
S42、根据约定密语解析密文获取SecretMap,若解析成功执行步骤S43,否则产生攻击警告,将当前访问请求报文中的agent信息和IP地址信息置入危险客户源并输出到日志中,向客户机提示错误;
S43、解析SecretMap中的send字段,并与current比较,如果出现current早于send或者current与send的差超过2倍平均网络时延,则认为受到撞库攻击,产生攻击警告,将当前的agent信息和IP地址信息置入危险客源并输出到日志中,提示错误;否则执行步骤S44;
S44、解析SecretMap中的device段和install字段,通过device段和install字段向服务器查询该客户机是否为可信客户机,如果是则该密文通过验证,否则执行步骤S45;
S45、检查发送访问请求报文的客户机的操作:如果是登录请求则向客户机进行提示警告,要求客户机提供可信登录操作证明进行验证,验证通过后,将当前信息加入到服务器中进行存储,并将该客户机标识为可信客户机,该密文通过验证,若验证未通过,则向当前在线的客户机发送不可信操作警告,同时产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误;如果客户机正在进行除登陆请求之外的其他操作,向当前在线的客户机发送不可信操作警告,同时产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误。
进一步地,所述步骤S4中的第二调整方案具体为:判断当前错误类型,如果为超时类错误则提示错误,要求客户机重新登录,跳转登录页面;如果为密文错误则产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误。
本发明的有益效果是:本发明针对传统记住用户登录状态需要在服务器留下相关信息的安全问题和单系统多平台容易出现多平台状态相互拥挤的情况进行了专门的优化,采用本发明的身份验证方法,不会在服务器上遗留客户信息,采用加密方式循环,修改字符、使用爬虫引擎撞库或者使用过期密文都会产生攻击警告,能有效降低使用缓存的风险和使用session会话引起的会话固定攻击风险,不会受到CSRF攻击,能够提高身份验证的效率和安全性。
附图说明
图1为本发明的单系统多平台身份验证方法流程图;
图2为本发明的客户机登录流程图;
图3为本发明的加密流程图;
图4为本发明的验证密文流程图;
图5为本发明的解析密文流程图。
具体实施方式
下面结合附图进一步说明本发明的技术方案。
如图1所示,一种单系统多平台身份验证方法,包括以下步骤:
S1、服务器获取客户机登录时使用的用户名和用户密码,然后访问数据库查找该用户是否存在,若存在则为该用户提供密文,否则提示错误并要求客户机重新登录;如图2所示,具体包括以下子步骤:
S11、服务器获取客户机登录时使用的用户名和用户密码,访问数据库查找该用户是否存在,若存在则执行步骤S12,否则提示错误并要求客户机重新登录;
S12、从数据库中提取该客户机对象,提取token字段,若token字段为空则执行步骤S13,否则执行步骤S14;
S13、使用put方法,将当前客户机的标识信息、当前时间戳、当前登录客户机的平台信息加入到一个字符串—字符串图中,将字符串—字符串图加密成密文,置入缓存;
.net框架下开发的客户端的agent字段统一置为UWP,安卓系统下开发的客户端agent字段统一置为ADW,IOS系统下开发的客户端agent字段统一置为IOS,下面具体命名空间(或称包)举例以UWP为参考。如图3所示,所述加密过程包括以下子步骤:
S131、获取客户机的设备类型,可以使用DeviceFamily命名空间中的内容获取,使用put方法加入字符串—字符串图SecretMap中,键值为:device;
S132、获取当前程序包被安装的时间,可以使用Package命名空间中的内容获取,使用put方法加入字符串—字符串图SecretMap中,键值为:install;
S133、获取系统时间,使用put方法加入字符串—字符串图SecretMap中,键值为:send;
S134、以JSON格式将字符串—字符串图SecretMap加密,使用的密语由程序开发时定义,由客户机和服务器硬编码保存。
S14、解析token字段,将token字段还原为明文,从请求登陆的报文的首部提取agent字段,作为键值访问指定字段,将其修改为指定内容;再修改LastLogin字段为当前时间戳;修改完后加密成密文,置入缓存;
S15、返回登录成功信息,将密文加入到返回报文的首部作为客户机请求访问闲置资源的密文凭证。
S2、服务器接收客户机发送的对于限制资源的访问请求,并接收用户提交的密文;
S3、服务器验证密文,验证成功后进入步骤S4,验证不成功则执行第一调整方案;
如图4所示,所述验证密文包括以下子步骤:
S31、服务器解析HTTP请求报文的头部信息,提取其中的验证协议约定字段,提取成功执行S32,否则执行S36;
S32、将提取到的验证协议约定字段进行解密,得到字符串-字符串图的结构,称其为StatusMap,提取HTTP请求报文中的客户机代理字段,依次获取客户机所处的平台;
S33、判断客户机使用的平台,若为web平台则执行步骤S331,若为非web平台则执行步骤S333;
S331、从StatusMap中提取web字段作为验证内容,分析是否出现协议内容错误,若协议内容无误则进行步骤S332;若协议内容有误则进行报错,并报告一次协议内容错误记录,然后执行步骤S34;
S332、判断协议内容与当前时间戳相比是否超时,如果出现超时则进行报错,并报告一次过时错误记录,然后执行步骤S34;若未超时则更新定时器,然后执行步骤S35;
S333、提取响应字段作为验证内容,按照各自协议内容维护持久登录信息,判断登陆信息是否验证成功,若验证成功则执行步骤S35;否则进行报错,并报告一次登陆错误记录,然后执行步骤S34;
S34、提示客户机错误信息,并要求重新登录;
S35、重新生成报文,并根据服务器与客户机的协议内容对报文进行加密,将新的报文加入服务器响应报文中的pretoken字段;
S36、无法提取验证协议约定字段或验证协议约定字段验证失败,意味着使用了过期协议报文,表示受到了会话固定的攻击方式,服务器产生攻击警告,并置入服务器日志;
S37、提取StatusMap中客户机身份信息内容,并将其作为业务逻辑中的令牌。
所述第一调整方案具体为:分析验证结果,查看是否存在密文语法错误(Syntax Exception),若存在则产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,并提示错误信息,要求客户机重新提供密文;
若不存在密文语法错误则检查HTTP报文段中的请求信息,分析报文中agent和IP地址是否源自危险客户源,如果是则产生攻击警告,并将信息输出到日志中,然后要求客户重新提供密文;否则提示错误信息,要求客户端重新提供密文。
S4、服务器解析密文,根据请求访问的客户机信息查询相关字段内容,根据各客户机的协议内容决定当前操作是否存在错误,如果没有错误则进入步骤S5,否则执行第二调整方案;
如图5所示,解析密文包括以下子步骤:
S41、接收客户机发送的访问请求报文和密文,获取报文和密文接收到的时间戳,记为current;
S42、根据约定密语解析密文获取SecretMap,若解析成功执行步骤S43,否则产生攻击警告,将当前访问请求报文中的agent信息和IP地址信息置入危险客户源并输出到日志中,向客户机提示错误;
S43、解析SecretMap中的send字段,并与current比较,如果出现current早于send或者current与send的差超过2倍平均网络时延,则认为受到撞库攻击,产生攻击警告,将当前的agent信息和IP地址信息置入危险客源并输出到日志中,提示错误;否则执行步骤S44;
S44、解析SecretMap中的device段和install字段,通过device段和install字段向服务器查询该客户机是否为可信客户机,如果是则该密文通过验证,否则执行步骤S45;
S45、检查发送访问请求报文的客户机的操作:如果是登录请求则向客户机进行提示警告,要求客户机提供可信登录操作证明进行验证,验证通过后,将当前信息加入到服务器中进行存储,并将该客户机标识为可信客户机,该密文通过验证,若验证未通过,则向当前在线的客户机发送不可信操作警告,同时产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误;如果客户机正在进行除登陆请求之外的其他操作,向当前在线的客户机发送不可信操作警告,同时产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误。
所述第二调整方案具体为:判断当前错误类型,如果为超时类错误(Overtime Exception)则提示错误,要求客户机重新登录,跳转登录页面;如果为密文错误(Protocol Exception)则产生攻击警告,将当前的agent信息和IP地址信息置入危险客户源并输出到日志中,提示错误。
S5、服务器返回允许客户机访问限制资源的回执,并重新加密密文,将加密完成的密文重新发送给客户机。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。