写一篇这样的文章是专门针对客户端认证机制
的文章,为了对之前的一些相关的验证机制进行一个总结,对有关的一些授权机制能够更熟悉。在此之前,因为cookie跟session等的问题可能会使得一些授权信息混乱,想根据自己的实际经验跟HTTP权威指南的一些指引下,做一个总结。
在HTTP的请求由许多的首部组成,
比如说 reference
、host
,每一个首部都会包含着一种请求信息。
首部由
key: value
这样的形式组成
在最开始的互联网世界当中,在访问互联网站点的时候第一次访问并没有记住一些数据内容,
这样使得在第二次访问的时候用户需要重新输入一些内容,
这样就会造成许多不便
那么在指定HTTP标准的时候,便想有一种机制
对用户身份进行识别,
在初期有几个识别方案
根据ip地址对客户端进行识别验证显然不是一个好的选择,因为ip地址很容易伪造
比如说我可以通过使用代理去伪造身份,还有另外一个原因就是对于一些网络运营商,往往分配的ip是动态ip,
因此在服务器对客户端验证的时候并不能作为一个唯一的标识,对其进行识别
用reference
能够识别访问来源,但是同样也可以很容易进行伪造,从而使得无法对用户进行有效验证。
假设一种场景,作为一个个人用户,在访问网页的时候,我希望我的访问能够被浏览器记录下来,而不用每一次都进行用户登录,这时候cookie
就为了解决需求而生
在进行浏览器访问的时候,有一些网站会询问是否运行Cookie,除此在设置里面同时也可以禁止cookie,
浏览器可以根据用户需要将cookie存储起来,在下次访问的时候账号密码就已经为用户储存好了
上面提到的就是长期cookie
在cookie的发明制定以来,存在着两种标准。
在客户端服务器的验证过程中,由服务器向客户端发送一个set-cookie
请求
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XvJ665im-1637565963387)(https://z3.ax1x.com/2021/07/29/Wq0eL4.png)]
在接受请求之后储存在客户端当中,
在下一次发送请求当中,客户端会带上cookie请求服务器,服务器可以根据cookie的信息再返回相关的值给客户端。
在cookie中有一个值Max-Age
(版本1为Expires)用于记录cookie销毁时间,而且两个的机制不太一样,一超过授权时间,
cookie就会失效,就需要重新验证。
手动面试题警告
这是涉及到比较多的问题,对二者的比较也在不断
在一次DEMO的编写当中
在flask里面,只需要简单的语句即可以进行一系列验证
from flask import Flask,request,render_template,Response, session, redirect
session['user'] = username
那么session跟cookie二者有什么区别呢?
在这个问题之前我想问自己一个问题
cookie如果是可读写的,并且如果是明文传输的话,那么不是会很不安全?
在我看来,其实session机制属于cookie的一种实现
二是session往往都是加密后的数据(非明文传输),这就解决掉了许多安全上的问题。
但是本质上的不同在于
session储存在服务器上,cookie储存在客户端上
session
means 会话,
一般来说,可以将session储存在服务器当中,用于识别用户状态
在我看来,session就相当于一种短暂的cookie机制
在Cookie设计当中,同时也会经常出现一些安全方面的问题。
当然先肯定cookie在设计的时候使用domain
解决了跨域问题,用Max-Age
解决了授权时间问题,
但仍然会出现一些问题
首先cookie虽然往往是加密后的内容,但是cookie是可以更改的,并且
在许多时候,可以利用cookie进行模拟登录
甚至修改一些个人信息。
期待更深入探索客户端验证