自我扫盲.application,session,cookie到底是嘛玩野?

本文用于自我扫盲.根据多篇文整合并依自己观点补充.引文会在最后注明.

0x01.application,session,cookie到底是嘛玩野?

  application对象用于保存所有应用系统中的公有数据,永久存在,所有用户可以共享application对象,application对象与session对象的区别是,session对象和用户会话相关,不同用户的session是完全不同的对象,而用户的application对象都是相同的一个对象,即共享这个内置的application对象,简化的说就是session保存的是特定用户信息,application保存的是所有用户信息

  Session用于保存每个用户的专用信息.她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择.

  Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4096,因此不要用来保存数据集及其他大量数据.(有专门的攻击通过设置cookie内容大于4k来迫使页面返回出错的cookie内容达到绕过httponly的目的),由于并非所有的浏览器都支持,启用了Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则你懂的

 


0x02.tomacts和Apache,WebLogic是什么?

  tomcats是开源的jsp服务器,类似于微软的IIS。都是WEB服务器。和IIS、Apache等Web服务器一样,Tomcat具有处理HTML页面的功能,不过对html解析速度没有apache优秀
Apache是一个强大的Web服务器,在处理静态页面、处理大量网络客户请求、支持服务的种类以及可配置方面都有优势,但是没有JSP/Servlet的解析能力.两者各具优点,整合两者可以看作是用Tomcat做Apache的jsp/servlet解析插件,不过Tomcat作为一个Web服务器,本身具备了基本的Web服务功能,在SUN的力推下,将来或许越来越强壮到不需要借助Apache优势的地步

 


0x03.Global.asa是什么?
  这是asp下用来保存变量以及方法申明的文件.用来设置aaplication和session在启动或结束时发生什么事件,为什么要记这个??

 


0x04.那么,详细的说下cookie和session是啥?

  Session是服务端为每个访客"单独开辟"的一块具有"时限"的"内存分区",(只限登录情况下,不登陆则根本不分配session.服务器为什么要给一个临时访客特地开辟一个标识呢?都说了是临时的...),这个具有时限的容器被用来存放用户会话时的一些信息,比如用户名,会话记录等,它使用一个ID来标志这个内存区间是你的而不是别人的,这快内存区间你可以理解为seeion的本质,一个容器,就像是超市的锁柜,超市里的顾客来来去去,它会临时的为人们存放一些会话信息,同时服务器会将充当锁柜钥匙的session_id发回给访客的浏览器放入临时cookies中,只要你的浏览器没有关闭,你每次向服务器发送回话请求,服务器都会接收到你cookie中存储的这个id,根据这个标识辨识你,从相应的容器中调取之前为你存放的会话信息.可以这么理解,seesion和cookie都是一种让客户端与服务器之间保持状态连续性的方案,这必然需要服务器在客户端也保存一个标识,所以seeion需要借助cookie来达到保存标识的目的.

  Session是针对每一个用户的,其内容保存在服务器上(果断劫持seeion是不太可能了),用一个sessionID来区分是哪个用户的session变量,这个值是通过用户浏览器中的cookie在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。

  Session的机制: 当web程序收到某个访客的会话请求时,服务器首先检查这个客户端的请求里是否已经包含了一个session标识(身份ID),如果已包含则说明已经为此访客创建过session了,服务器就直接按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此访客新建一个session(用来放置会话信息的锁柜)并且生成一个与此session配对的session id(钥匙),然后服务器会把这串ID会随被请求的网页一并发还给访客的浏览器,显然session id的值作为一串验证身份的密钥应该是一个既不会重复,又不容易被找到规律的字符串。

  Session id通常被存储在cookie内,这样在交互过程中浏览器可以自动的按照规则把这个标识提交给服务器。一般这个cookie的名字都是类似SEEESIONID。另外由于cookie可以被人为禁止,那么就必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。这种时候通常会使用一种叫做URL重写的技术,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器

  Cookies是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies
如上面提到的,cookie是服务器那边送到客户端的信息,它同seeion一样都是为了弥补http无状态缺陷而提出的,分为persisten_cookie(持久存在于客户端硬盘上的一段文本,介不是xss的靶子吗)和sessio_cookie(针对某一次会话的临时数据),两类结合互用就能实现会话跟踪./http://blog.csdn.net/sean1203/article/details/5087468/

  Cookie的内容主要包括:名,值,期限,路径和域。路径与域一起构成cookie的作用范围。若不设置期限,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

  正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

待验证:就像js有各种对象和参数一样.cookie也有他自己的.它有自己的一套机制,类似同源策略那样保护内容不被泄漏.
待实测:php5.2以上版本服务器端的php.ini文件中有个session.cookie_httppnoly参数.若启用则开启这个属性.并使用https传输,可以通杀一切cookie劫持(5.1版本以下则需要在header函数中开启)

 


0x05.cookie存在的目的是什么?

  用户向web端请求某个页面后.web回应这个请求并向浏览器返还一个页面,同时开辟一个内存分区存放这个特定用户的这次会话的一些历史数据.web服务器向用户回应页面时会顺便把指向那个分区的钥匙一并发给用户端,好保存在cookie中以便用户下次请求页面时取用,这样一连串的操作保证了用户与web服务器间状态的连续性.而连续的状态达到了"状态管理"的目的,Cookie 的作用就类似于名片或钥匙。cookie能做到很多事,但无论哪一件都是为了让Web 站点记住你。

注*

  1.作为开发者要对从 Cookie 中得到的任何信息都持怀疑态度。不要认为得到的数据就是您当初设想的信息,处理 Cookie 值时采用的安全措施应该与处理 Web 页面中表单提交内容的安全措施相同,都进行严格的过滤。(前些天正好看到了cookie注入的原理)

  2.Cookie 是以纯文本的形式在浏览器和服务器之间传送的,任何可以截取 Web 通信的人都可以读取这段文本的内容,例如Fiddler等软件可以轻易的截获其中内容.不过你可以对 Cookie 的属性进行设置,使其只能在https(SSL)的连接上传输,这并不能防止保存在用户计算机上的 Cookie 被他人读取,但能防止Cookie 在传输途中被他人截取。

 

 

 

有空看下关于cookie安全性的两篇文章
http://www.yesky.com/13/1790513_1.shtml
http://sec.chinabyte.com/223/8986223.shtml
引文
http://blog.csdn.net/sean1203/article/details/5087468 *由JSESSIONID谈cookie与SESSION的区别和联系
http://wenda.tianya.cn/question/53a018854a98b23d *如何看懂cookie 这个最好一边学php一边看.
http://hi.baidu.com/stodbx2002/item/b49c581b28fb97cd39cb3091 *关于Cookie安全性设置的那些事

posted @ 2013-07-15 22:05  defcon  阅读(85)  评论(0)    收藏  举报