1.验证码
2.自动登录
3.状态追踪
为什么要用验证码
防止脚本无限次重复登录,来暴力破解用户密码或者攻击服务器
验证码的出现,使得每次登录都有个动态变量需要输入,无法用脚本写死代码
自动登录的实现
所谓自动登录,指的是当用户登录网站时勾选了自动登录,那么下次再访问网站就不需要输入账号密码直接登录了
这说明,账号密码信息是必须保存在用户这边的,因此自动登录都是不安全的!(方便的代价呀)
尽管不安全,但是我们也必须要尽力让它安全一点,有以下常用方法:
- 密码加密
- ip检测,自动登录时检查与上次登录的ip是否相同
- 降低自动登录后用户的权限,如不能进行改密码等危险操作
数据存储在前端哪里呢
浏览器有3个经常保存数据的地方
1.Cookie (我用这个):后端能直接操作Cookie,保证完成任务。需防范csrf攻击。
2.LocalStorage: 无限期本地存储
不过后台无法操作这里的数据,只能由js代码操作
(至于操作结果,完全看js,后端无法感知,不太可靠),我认为这里不适合保存敏感点的信息,因为前端的功能是展示,状态性的数据应该由后端直接掌控(后端能直接操作Cookie,保证完成任务)
3.SessionStorage:不同标签页数据不共享,有毛用
cookie方案
1.用户第一次登录时,后端接收到用户账号和密码,生成token,将token设置到cookie中返回
2.前端收到保存cookie
3.前端下次访问时浏览器会自动携带cookie
4.后端检验cookie中的token
6.完成自动登录功能
localStorage
1.用户第一次登录时,后端接收到用户账号和密码,经过复杂的加密(md5)后,设置一些参数后(过期时间等)返回一串token字符串
2.前端接收到字符串后,将字符串保存到本地(localstorage)
3.在发送的每个请求的header头中的Authorization字段中添加保存的token
4.后端接收请求后进行验证(token是否正确或过期),若过期,返回401
5.完成自动登录功能
如何维护前后端登录状态
状态追踪
- Token
- cookie
- session