本文共 1895 字,大约阅读时间需要 6 分钟。
session意为“会话”。我们都知道HTTP是无状态的协议,但有时我们需要保存状态来进行后面的操作,比如某个电商网站的购物车功能(在不登录的情况下,也就是不使用数据库),如果不使用session,那么每次添加物品到购物篮后都不会保存,结果就是刷新一下购物篮就会变成空的。所以我们需要这个session来保存一定的状态。当用户打开某个网页的时候,就发生了一次会话,也就是产生了一个session,服务器会将session保存在服务器上,session中可能包括了用户信息,在用户离开网页之后,session就会被销毁。
本文这个不是重点,只是简单说下
session在每一次会话开始的时候产生,其中存放会话的信息,每一个session都有一个session_id。在账号密码登陆成功后,会在session保存相应的登陆状态,然后服务器会将这个session_id存放在cookie中发送给客户端,这样浏览器下次访问的时候,会带着cookie中的session_id进行访问,服务器再根据这个session_id来找到对应的session,再去session中查找相关信息判断用户是否能正常登陆。
看起来session的验证和token的验证很相似,都是从服务器返回一个数据,然后之后每次请求的时候都带着,发送给服务器验证。但其实是有很大不同的。
跨站请求攻击,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一定的操作。因为浏览器认证过,所以网站会认为是真正的用户在操作。
例子
假如一家银行转账操作的URL地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
那么,一个另外的网站可以放置如下代码<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
如果用户之前刚访问过银行网站,登陆信息尚未过期,再次访问恶意网站点击了这个图片,那么就会损失1000元。事实上,这些地址还可以放在论坛、博客等地方,这种恶意访问的形式更加隐蔽,如果服务端没有相应措施,很容易受到威胁
HTTP头中有一个Referer字段,这个字段是用来标明请求来源于哪一个网址。通常来说,Referer字段应和请求的地址是在同一个域名下的。服务器可以通过判断Referer字段来判断请求的来源。
这种方法简单易行,但也有其局限性。http协议无法保证来访的浏览器的具体实现,可以通过篡改Referer字段的方式来进行攻击token不存放在cookie中,那么攻击者就无法得到这个随机生成的token,就无法执行CSRF攻击
转载地址:http://ilxui.baihongyu.com/