前端安全系列之登录那些事

一、Cookie与Session

HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行保存。因为无法管理用户状态,对于要登录的页面,每次跳转新页面时都需要再次登录。

于是引入了Cookie来管理用户状态:

① 首先客户端发起不带Cookie信息的登录请求

② 服务端接收到请求,验证用户数据正确后,添加响应头Set-Cookie

③ 客户端收到响应报文后,检查到响应头Set-Cookie,在本地保存Cookie

④ 之后每次向该域发起请求时,自动添加请求头Cookie,发送给服务端

⑤ 服务端获取请求头Cookie,根据Cookie的值,就可以判断出用户是否登录

但是Cookie极容易被篡改和伪造,于是产生了Session,Session将用户信息保存在服务端,那么Session是如何管理用户状态的呢?

① 首先客户端发起不带Cookie信息的登录请求

② 服务端接收到请求,检查到没有携带口令,验证用户密码正确后生成Session,将用户信息保存在Session,设置响应头Set-Cookie,通常是将Session ID作为口令值

③ 客户端检查到Set-Cookie响应头,在本地保存Cookie信息

④ 之后每次发起请求时,自动在请求头Cookie中携带口令,发送给服务端

⑤ 服务端获取Cookie携带的口令值,找到对应的Session,就可以判断用户状态

二、如何让Session口令值更安全

虽然口令值由服务端生成,用户不容易伪造,But nothing is impossible;而且口令值存在客户端,就有可能被盗用。一旦口令值被伪造或盗用,攻击者就可以伪装成用户访问服务端的数据。

那么如何让Session口令值更安全呢?

① 将客户端的某些独有信息+口令值作为原值,对其进行签名

② 将口令值拼接签名返回给客户端,将Cookie设置为HttpOnly(禁止用户通过脚本来获取和更改Cookie)

③ 服务端再次收到请求,取客户端信息与口令值签名,与客户端携带的签名对比,不相等,说明请求不合法

这样的话:

① 即使攻击者知道了口令值,由于不知道密钥,无法伪造签名

② 即使攻击者通过某种方式得到了真实的口令值和签名,但是由于攻击者的客户端信息不一样,发送到服务端后,会得到不一样的签名,签名校验不能通过

三、多系统的复杂性

web系统由早期的单系统发展成多系统组成的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值