天天看点

《web应用安全》 cookie与会话管理

cook与会话管理

会话管理

记住用户登陆后的认证状态是一种常见的需求,使用http认证能使浏览器记住id和密码,但是不使用http认证时,记忆认证状态的任务就交给了服务器,而像这种记忆应用程序状态的功能就叫做会话管理。

cookie

格式:cookie:phpsessid=会话id 
           

cookie相当于服务器下达给浏览器的命令,让其记住发送给它的“名称=变量”这种格式的值。

1,最初显示页面时,返回的响应信息中含有cookie响应头信息,web服务器向浏览器下达了记住此cookie值的指示。

2.浏览器记住了cookie值,从此在向相同网站发送请求时,就会发送此cookie值

简单的来讲就是,你登陆一个网站输入个密码,服务器给你返回个cookie,每次在这个网站上进行操作的时候,就不用每次都输入密码,因为你每次的请求,浏览器会自动发送cookie和服务器进行认证。

会话id应满足的需求

不能被第三方推测

不能被第三方劫持(预防,认证后改变会话id)

不能被第三方泄露。

会话id泄露的原因

  • 发行cookie时的属性指定有问题
  • 会话id在网络上被监听
  • 跨站脚本漏洞等应用中的安全隐患被泄露
  • 会话id保存在url中的情况下,会通过referer消息头泄露

通常保护会话id不被监听,采用ssl加密

cookie的属性

属性 含义
Domain cookie发送对象服务器的域名
path cookie发送对象url的路径
Expires cookie的有效期限,未指定则表示至浏览器关闭为止
Secure 仅在ssl加密的情况下发送cookie
HttpOnly 指定了此属性的cookie不能被javaScript访问

涉及安全的3个重要属性为Domain Secure HttpOnly

cookie的Domain属性

在需要向多个服务器发送cookie时,就用到了Domain属性

假设 浏览器要给三个服务器发送

a.example.jp

b.example.jp

a.example.com

设置的cookie为:set-cookie:x=123;Domain=example.jp

指定domain为example.jp,因为没有指定example.com,后者就不会被发送.

如果在cookie中指定不同的域名,就可能发生会话固定攻击,所以cookie是不能指定不通域名的。

未指定domian属性时,cookie只会发送给生成它的服务器,发送范围小,也更安全。而设置domain属性时,稍有疏忽,就会产生安全隐患。

原则上不设置ciikie的domain属性

cookie的secure属性

设置了secure属性,的cookie尽在ssl传输的情况下,能够发送给服务器
未设置的 无关是否为ssl传输,都会发送
           

cookie的HttpOnly属性

给cookie添加httpOnly属性,在php.ini中添加如下设置
session.cookie_httponly = on 
           

恶意使用javascript进行跨站脚本攻击,从而取得cookie信息,窃取会话id

,设置httpOnly属性可以加大其攻击难度。

继续阅读