cookie基础,相关hacker攻防

cookie机制

cookie其实是一段文本信息,当web浏览器第一次访问某个服务器时,服务器会给浏览器颁发一个cookie,浏览器将cookie保存,当浏览器再次请求该网站时,浏览器会把请求的网址和cookie一同提交给服务器。服务器检查该cookie,得知该用户状态。服务器还能够根据须要修改cookie内容。前端

session机制

session是服务器端保存的数据结构,用来跟踪用户的状态,客户端的cookie仅保存session ID,之后每次请求将cookie和网址发送,服务器根据session id,就知道该用户是谁了web

session和cookie机制的区别和联系

区别:浏览器

  1. session将用户信息保存在服务器端,前端只有session ID,cookie将用户信息保持在前端浏览器中
  2. session由于用户接触不到客户信息因此更安全

联系:安全

  1. cookie是实现session机制的一种方式,初次以外,还能够直接在网址后面添加sid=xxxxx的方式(在用户浏览器禁用cookie的状况下)

若是用户浏览器禁用了cookie怎么办?

如今的浏览器通常禁用cookie,不是彻底禁用,而是失去了“持久化”的做用,关闭窗口清楚cookie,因此依然能够登录网站服务器

  1. 使用session机制,首先使用URL重写技术在url后面添加Session id,进行身份认证, 或者还有一种技术叫作表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时可以把session id传递回服务器。 若是不容许添加参数,服务器依然发送Set-Cookie的Header,只是客户端会忽略,则每次访问建立一个新的session,以前状态不会保留,登录状态没法维持
  2. 使用cookie机制,禁用cookie,会致使登录状态没法维持

为何须要cookie,session?

因为HTTP是无状态的协议,指协议对于事务没有记忆能力,若是后续处理须要知道前面的信息,(例如某宝查询该用户以前的购买记录),则它必须重传,这样致使可能每次链接的数据量增大。可是在数据量小的时候它的应答很快cookie

可是客户端和服务器端进行交互的Web应用程序出现后,应用要求须要知道用户都作了什么,例如登录状态、购物车买了什么等信息,HTTP的无状态严重阻碍了这些应用功能的实现。session

为何不直接将HTTP改为有状态的协议?

  1. http在传递数据小的时候应答速度很快
  2. 软件工程角度讲,http已是一个较为成熟的协议,后面的修改应该是上层的封装,即
    有状态协议 = http + cookie 或 = http + session

盗窃cookie的两个场景

  1. 场景描述
    在公司的一台机器上,职员A登录了网上银行进行了转帐操做,以后他删除了cookie,删除了浏览器自动保存的密码,删除了全部的临时文件,而后退出了机器。几分钟后,职员B来使用这台机器,B检查了浏览历史,发现有人曾经登录过网上银行而且,url里面含有参数JSESSIONID,B随后使用和A相同的JSESSIONID建立了一个cookie,成功登录进去了A的银行帐户
    存在的漏洞
    session的ID用来追踪一个会话,暴露在url里面做为请求参数很容易就会被利用
    防御措施
    • 不要将JSESSIONID暴露在url中
    • 为每一个会话建立一个时间戳,表明会话有效期,超过这个有效期,会话无效。
    • 最好的方法是将JSESIONID和时间戳time-stamp保存在一个超级cookie里面,而后对这个cookie进行加密处理,每次请求都须要对cookie解密使用里面的信息。
    • 用户方面能够在每次登录后经过点击退出按钮登录使得JSESSIONID无效。
  2. 场景描述
    和第一个场景相似,可是此次银行将JSESSIONID和time-stamp封装在了超级cookie中并进行了加密处理,职员A在退出时点击了退出按钮,可是hacker依然窃取了他的帐户。 (黑客中途截断了用户的请求进而窃取了cookie)
    存在的漏洞
    时间戳保留时间为了用户能够完成相应的操做,可是hacker只要窃取了用户的cookie即可以同时登录其帐户。
    防御措施 cookie再添加一个值叫作Counter/Nonce,一串随机的二进制数字, 每一次请求后,服务器就会修改Counter/Nonce的值以保证同一个超级cookie不会发起二次请求。
相关文章
相关标签/搜索