为什么不结合签名的方式优化登录流程

查看 84|回复 6
作者:element90   
其实这个疑问在现在这个时间节点上不应该成为问题,因为现在的网络协议都基本带上 ssl 了,如 https 。
但在当初不普及 https 的网络年代,抓包的方式很容易捕获传输数据,特别是像密码这样的数据。
先说一下以前乃至现在比较常规的登录方式吧。
无非就是客户端/web 输入 usernameMD5(password) ,然后 post 的方式提交到服务器,尽管 password 使用了 MD5 函数,但是结果还是不变的,只要密码没有被修改,这个值是不会变的,别人盗取了这部分数据依旧可以模拟你的登录。
但,如果流程这个环节使用签名的方式,就不一样了。
让客户端设置一个当前时间戳 timestamp , 登录时将 username + timestamp 则为明文 P,然后用 MD5(password) 为签名秘钥 S,得出 sign = HASH(P+S)。
传输的过程中仅将 username, timestamp , sign 提交到服务器,那么即时明文状态下被抓包,对方也无法得出关键数据 password or MD5(password),而且服务端可以根据 timestamp 计算时间差,比如 5 秒内有效,使得监听者在超过时效范围内无法通过重放请求实现登录。
这个就是单纯的签名流程在现在的开放平台上(openapi)应用非常广,理论上当时就应该有,可是为什么在 http 流行的网络年代没有被应用在登录流程上。

password, TIMESTAMP, md5, username

flyqie   
你这方案能防盗号,但是仍然可以在其他点抓包拿其他信息。。
可能是觉得成本和回报不成比例?
tool2d   
其实是有的,只是你不知道。
2005 年左右 mysql 很火,远程登录并没使用 SSL 加密协议,但密码还是用服务器返回的 token 加密过了。就是为了防抓包。
i8086   
楼主说得这一套,网易和腾讯是有用上的。
element90
OP
  
@flyqie 在那个年代,成本显然是低于 ssl
element90
OP
  
@tool2d 哈哈,可能是我孤陋寡闻了,因为当年我在参加工作的时候没有考虑到这么多,同时也没有任何人或者在任何团队上看到这种方式,所以完全没有看到这方面的应用,直到现在突然联想到这个问题发现当时没人这么做非常不合理。原来早就有了啊。。但是没有大规模形成实现标准,这也非常不合理啊
element90
OP
  
@i8086 那可能是我孤陋寡闻了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部