开源软件登陆认证问题

不少应用须要客户首先进行注册,而后使用用户名、密码进行验证,以前在为一个分布式系统添加认证模块的时候,遇到一个问题,这里进行简要的分析。linux


认证的两种主要形式:windows

1.  单机登陆认证:如windows、linux系统用户登陆,这种应用的程序代码一般是不公开的,用户要正常的使用系统,必须越过这一障碍。服务器

2.  网络登陆认证:如QQ、飞信等聊天软件的用户登陆,这种应用的代码能够是开源的,由于即便即便代码开源,hacker去掉了客户认证的代码,从新编译运行,服务器发现记录客户端的登陆状态为未登陆,客户端仍是不能继续工做。网络


项目中遇到的问题:分布式

客户端经过挂载后,像使用本地文件系统同样使用远程文件系统。登陆认证在挂载的时候进行,用户名密码必须是服务器linux系统上的用户,服务器为每一个用户创建单独的用户文件夹存储用户数据。编译


在简单的添加了认证过程后,客户端必须经过认证才能正常使用系统,之后客户端的请求数据中都包含了用户名信息。但因为登陆模块是硬加到挂载过程当中的,并且系统是开源的,若是hacker在使用前,在客户端代码中将认证的代码去掉,是能够直接使用文件系统的。解决的方法是:相似于经常使用的网络应用,在服务器端记录用户的登陆状态,此时hacker即便去掉登陆的代码,仍不能正常使用系统,由于服务器端的状态标识其未登陆。登录


这样作仍然存在问题,客户端每次请求都包含用户名,服务器只是检测该用户是否已经登陆,若是hacker去掉登陆代码并伪造本身的身份,修改请求中的数据,若是该用户刚好为已经登陆的用户,hacker仍是有机可趁。解决该问题的方法:客户在登陆成功后,服务器为其生成一个随机通讯码,之后客户端的请求中将包含用户名与对应的随机通讯码,服务器只有检测到用户名与随机通讯码都匹配时才相应客户端的请求。服务器端

相关文章
相关标签/搜索