记录一下学xss和csrf而涉及的这方面内容:
参考:
https://www.cnblogs.com/xuxinstyle/p/9675541.html
https://www.cnblogs.com/moyand/p/9047978.html
https://www.jianshu.com/p/24825a2683e6
一.Cookie:
1.作用:用于维持http协议无连接状态,并且标识不同用户。
2.使用:在浏览网站时会,服务器会写入一个非常小的cookie文件在你的电脑,比如用户ID,密码,停留时间等。当下次浏览时先检测你的硬盘,若有cookie则直接读取,无需再输用户密码。(这就是不小心关闭一个网页再点开却不用再次输账号密码的原因)
3.分类:内存cookie和硬盘cookie。
4.大小:大多数浏然器支持最大为4096kb,大约4kb。并且只允许每个站点存储20各cookie,再多了就会替换旧的。甚至有的浏览器限制来自所有站点的cookie为300个。
5.格式:见《web安全深度剖析》p135
6.利用读写代码从而盗取利用cookie,然后利用burp替换为制定cookie,在“proxy”→“options”→“match and replace”(正则形式!)或者Chrome浏览器的f12的console修改(document.cookie)。
二、Session:
1.概念:另一种维持会话转态的是session,其是一种服务器端机制,存储在服务端,仅仅在客户端存储一个id。服务端使用类似散列表的结构保存。
2、注意:session是指用户在浏览某个网站时,从进入网站到浏览关闭所经过的这段时间,即“对话”,浏览器关闭,session自动注销。
3、区分普通用户和管理员,依靠SESSIONID来区分不同session。
4、可以存储在cookie中,相当于临时cookie,也可能在url中。
三、Token:
1、概念:Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。
2、作用:Token 完全由应用管理,所以它可以避开同源策略;Token 可以避免 CSRF 攻击(http://dwz.cn/7joLzx);Token 可以是无状态的,可以在多个服务间共享。
3、使用:
(1)用设备号/设备mac地址作为Token(推荐)
客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。
服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。
分析:此刻客户端和服务器端就统一了一个唯一的标识Token,而且保证了每一个设备拥有了一个唯一的会话。该方法的缺点是客户端需要带设备号/mac地址作为参数传递,而且服务器端还需要保存;优点是客户端不需重新登录,只要登录一次以后一直可以使用,至于超时的问题是有服务器这边来处理,如何处理?若服务器的Token超时后,服务器只需将客户端传递的Token向数据库中查询,同时并赋值给变量Token,如此,Token的超时又重新计时。
(2)、用session值作为Token
客户端:客户端只需携带用户名和密码登陆即可。
客户端:客户端接收到用户名和密码后并判断,如果正确了就将本地获取sessionID作为Token返回给客户端,客户端以后只需带上请求数据即可。
分析:这种方式使用的好处是方便,不用存储数据,但是缺点就是当session过期后,客户端必须重新登录才能进行访问数据。
ps:参考几篇文章做的小总结,不对之处还望师傅们斧正。