客户端认证机制

写在前面

写一篇这样的文章是专门针对客户端认证机制的文章,为了对之前的一些相关的验证机制进行一个总结,对有关的一些授权机制能够更熟悉。在此之前,因为cookie跟session等的问题可能会使得一些授权信息混乱,想根据自己的实际经验跟HTTP权威指南的一些指引下,做一个总结。

客户端验证机制

在HTTP的请求由许多的首部组成,

比如说 referencehost,每一个首部都会包含着一种请求信息。

首部由

1
key: value

这样的形式组成

在最开始的互联网世界当中,在访问互联网站点的时候第一次访问并没有记住一些数据内容,

这样使得在第二次访问的时候用户需要重新输入一些内容,

这样就会造成许多不便

那么在指定HTTP标准的时候,便想有一种机制

对用户身份进行识别,

在初期有几个识别方案

  • ip地址

根据ip地址对客户端进行识别验证显然不是一个好的选择,因为ip地址很容易伪造

比如说我可以通过使用代理去伪造身份,还有另外一个原因就是对于一些网络运营商,往往分配的ip是动态ip,

因此在服务器对客户端验证的时候并不能作为一个唯一的标识,对其进行识别

  • reference

reference能够识别访问来源,但是同样也可以很容易进行伪造,从而使得无法对用户进行有效验证。

假设一种场景,作为一个个人用户,在访问网页的时候,我希望我的访问能够被浏览器记录下来,而不用每一次都进行用户登录,这时候cookie就为了解决需求而生

Cookie

在进行浏览器访问的时候,有一些网站会询问是否运行Cookie,除此在设置里面同时也可以禁止cookie,

浏览器可以根据用户需要将cookie存储起来,在下次访问的时候账号密码就已经为用户储存好了

上面提到的就是长期cookie

在cookie的发明制定以来,存在着两种标准。

在客户端服务器的验证过程中,由服务器向客户端发送一个set-cookie请求

Wq0eL4.png

在接受请求之后储存在客户端当中,

Wq0ZyF.png

在下一次发送请求当中,客户端会带上cookie请求服务器,服务器可以根据cookie的信息再返回相关的值给客户端。

在cookie中有一个值Max-Age(版本1为Expires)用于记录cookie销毁时间,而且两个的机制不太一样,一超过授权时间,

cookie就会失效,就需要重新验证。

Cookie与Session

手动面试题警告

这是涉及到比较多的问题,对二者的比较也在不断

在一次DEMO的编写当中

在flask里面,只需要简单的语句即可以进行一系列验证

1
2
from flask import Flask,request,render_template,Response, session, redirect
session['user'] = username

那么session跟cookie二者有什么区别呢?

在这个问题之前我想问自己一个问题

cookie如果是可读写的,并且如果是明文传输的话,那么不是会很不安全?

在我看来,其实session机制属于cookie的一种实现

二是session往往都是加密后的数据(非明文传输),这就解决掉了许多安全上的问题。

但是本质上的不同在于

session储存在服务器上,cookie储存在客户端上

sessionmeans 会话,

一般来说,可以将session储存在服务器当中,用于识别用户状态

在我看来,session就相当于一种短暂的cookie机制

Cookie与安全

在Cookie设计当中,同时也会经常出现一些安全方面的问题。

当然先肯定cookie在设计的时候使用domain解决了跨域问题,用Max-Age解决了授权时间问题,

但仍然会出现一些问题

首先cookie虽然往往是加密后的内容,但是cookie是可以更改的,并且

在许多时候,可以利用cookie进行模拟登录

甚至修改一些个人信息。

期待更深入探索客户端验证