登入思考

一、传统的登入方式

     浏览器输入用户名密码,服务端校验通过,根据用户信息生成一个token,将token和user_id存到数据库或者session中,并将token返回给前端,存入cookie,后面浏览器每次请求都会带上cookie,服务端根据cookie查询用户,验证用户有效性。

     弊端:

     1)如果出现XSS(跨站脚本攻击)漏洞,由于cookie可以被js读取,XSS漏洞会导致用户token被泄露。

         解决方案:

         a)设置httpOnly,这样的话cookie将不会被js读取,浏览器会自动将它加到请求头信息中,但是带来了新的问题,很容易被XSRF(跨站请求伪造)攻击,因为只要当前浏览器开着,另一个界面可以很容易的跨站请求这个界面的内容,因为cookie会被默认发送出去。

         b)设置secure,这样cookie就只能通过https传输,可以过滤掉一些使用http协议请求的XSS注入。

     2)将验证信息存到数据库中,每次验证的时候,都需要去数据库中查询,增加了数据库的查询和存储开销。

     3)如果将token存到session中,也会增加服务器的存储压力。

二、使用token登入的方式

    需要有一个进行缓存token+redis的方式来实现共享session

三、使用jwt登入的方式

    不需要进行缓存jwt,但是jwt实现强制登出问题实现困难,还是要借token机制

你可能感兴趣的:(架构)