其实就是比如登录某购物平台,然后再打开钓鱼网站,它就会截取当前浏览器的会话,然后进行篡改数据,就可以跳过账号密码登录,使用当前您登录后的状态继续在此网站使用或不法操作;
继续深入说到这个问题就会涉及到session,cookie
session在前端如何实现?session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。
一般的话只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cookie 没了,session 也就没了。常见于什么购物车之类的东西,还有登录状态保存之类的。
session在后端如何实现?- 完全不用 session
使用 JWT Token 储存用户身份,然后再从数据库或者 cache 中获取其他的信息。这样无论请求分配到哪个服务器都无所谓。
- tomcat redis
这个其实还挺方便的,就是使用 session 的代码,跟以前一样,还是基于 tomcat 原生的 session 支持即可,然后就是用一个叫做 Tomcat RedisSessionManager 的东西,让所有我们部署的 tomcat 都将 session 数据存储到 redis 即可。
- spring session redis
上面所说的第二种方式会与 tomcat 容器重耦合,如果我要将 web 容器迁移成 jetty,难道还要重新把 jetty 都配置一遍?
因为上面那种 tomcat redis 的方式好用,但是会严重依赖于web容器,不好将代码移植到其他 web 容器上去,尤其是你要是换了技术栈咋整?比如换成了 spring cloud 或者是 spring boot 之类的呢?
所以现在比较好的还是基于 Java 一站式解决方案,也就是 spring。人家 spring 基本上承包了大部分我们需要使用的框架,spirng cloud 做微服务,spring boot 做脚手架,所以用 sping session 是一个很好的选择。
我说的只不过是比较常见的几种方式,tomcat redis 早期比较常用,但是会重耦合到 tomcat 中;近些年,通过 spring session 来实现。
上面明白了也就懂了钓鱼网站的原理以及怎么应对,尽量不要打开非法网站,平台用完后及时退出登录