国内大部分的授权协议都是Oauth2.0。这个协议简单的说通过给用户提供一个令牌(token),而不是通过用户密码来授权,这样的一个好处时,可以方便开发者开发软件,而使用者不需要将密码提供给开发者从而避免一些隐私的问题。
通过token证明你可以有资格对这个测试环境中的页面进行抓包。
其实抓包是一个很简单的概念,只要对http协议有基本的了解就可以,网上有大量的可以抓包的库。其实只要时基本的实现了http协议的客户端都可以抓包。比如说Python的url,bcloud就是在此基础上实现的。我找到的java的库是okhttp,之前似乎还有httpclient,没用过不多说了。就我用过的url和okhttp来说感觉都差不多,毕竟http协议也不会有太大变化了。
抓包其实不光是用在模拟登陆,很多很多地方都用得到,比如说做服务器的时候需要分析性能或者分析bug之类的,比如写爬虫之类的,是一个比较基本的技能。
抓包有很多中方法,除了用库分析以外,也有一些软件可以抓包,一般来说如果时浏览器抓包的,浏览器自身自带了很多分析工具网上教程也很多,搜搜就有。
但是浏览器抓包也有一些不好的地方。有些数据的信息时看不了的。比如说gzip格式的数据,json没有分析之类的,需要自己分析。通常来说都是用web浏览器抓包作为分析资料,用库来模拟实现web浏览器过程。
Cookie、Session 和 token
这里尝试解释一下,如果以后发现问题再修改,其实没完全理清楚。
Cookie
Cookie出现的主要目的是为了解决HTTP无状态的问题,是HTTP拓展协议。就好像之前所说的问题,用来保存用户的状态信息,比如说用户名,密码信息,购物车信息等等。Cookie通过浏览器来在客户端管理,不同浏览器之间互相独立。也有说法cookie分为内存和硬盘两种储存方式,硬盘上的cookie是浏览器共享的。
Cookie主要有名字、值、缓存时间、路径和域:
名字和域就是键值对没什么好说的。
Cookie有缓存时间限制,如果超过时限会消失,如果cookie没有设置缓存时间,则时间为本次会话,浏览器窗口关闭后就消失了。
路径和域构成了Cookie的作用范围,传送给服务器的cooki必须是作用范围大于请求资源的域才传送。
Cookie有大小限制,最大4k。另外浏览器通常也也限制每个站点cookie的数量和cookie的总量。
cookie产生的方式:正常来说是通过浏览器或者说http交互的,但是实际上也可以通过程序语言自己构建cookie。
Session:
可以说Cookie是客户端对用户信息的储存,而Session则是实现保存用户状态信息的机制。
通常来说当用户发像服务器发起一个链接,则服务器会建立一个Session,并且保存这个Session的历史内容,并且向用户发送一个Session ID。通常来说本次Session在用户完成会话之后就关闭了,但是服务器并不会删除这些信息而是将其作为历史记录绑定到用户储存起来。当下一次用户再次连接服务器后,通常来说根据Cookie来再次验证用户,然后结合用户历史记录重新生成一个Session并且重新发送一个SessionID。
但是还有一点需要说明。通常来说用户并不会通知服务器关闭Session。服务器通常来说会保持Sessioon一段时间,也需是几分钟,几个小时,几天都有可能。如果在此期间,依然用相同的SessionID去访问资源的话,那服务器同样是相应请求的。
用户可以通过Session ID来实现有状态的会话,但是Session理论上说也可以时无状态的,但是一般不会这样用。
广义上说Session并不是必须再Http协议上,可以再很多层上实现:以OSI为标准:
- 应用层:
- HTTP session:
- telnet:
- 会话层:
- 基于SIP(Session Initiation protocol)的网络电话
传输层:
- TCP session
对于没有实现正式的Session层的传送协议比如说(UDP)或者说存在时间非常短协议(HTTP),需要再更高层上实现Sesssion。典型的就是HTTP Cookie来帮助实现的状态初始化。
Token
有了Cookie和Session的知识,那token就比较好解释了,Token我理解的话就是Session ID的一种。
Cookie和Sesssion其实没有什么可以比较的东西,只能说通过Cookie,再更上一层次的设计上实现了为无状态的HTTP协议的Session机制。
token并不是cookie的一种,可以是cookie验证后的产物,但是token可以以cookie的形式储存,传递的时候也可以用cookie的形式来传送,也可以写入url里传送,也就时所谓的URL重写技术。另外Cookie通常是浏览器维护的,但是token不一定,可以以其他终端的形式维护。
唯一需要说明的是,为何有了Cookie还需要实现Session而不是只用Cookie:
一方面Cookie本身有一定的限制:
- 首先,cookie并不是万能的。cookie有很多限制,比如说不能跨域访问。跨域访问还有很多其他的问题需要考虑,这里不赘述了。此外token还是一种常用的防止CSRF的手段。
- 其次,cookie是明文传送的。除非你使用https的协议,http协议是明文传递的。明文传递cookie很容易被盗取,但是token就不会有这么明显的意义。
- 此外,即使不考虑安全的问题。每次都通过cookie来验证用户状态也是一个麻烦的问题。耗费了大量的资源且不必要。服务器验证之后给用户一个有一定时限的token,这样用户可以通过token免去验证的烦恼。
- 最后,Cookie本身时可以删除的。
另一方面Session并不只是实现了记录的内容。更多的时候用于标示和跟踪用户的作用。