Cookie
a small piece of data sent from a website and stored on the user’s computer by the user’s web browser while the user is browsing. Cookies were designed to be a reliable mechanism for websites to remember stateful information
Cookie中有一个关键的值:PHPSESSION,被称为会话ID
http的认证过程
Cookie与会话管理
使用HTTP可以使浏览器记住密码,但如果不使用HTTP,那么由服务器完成记忆认证状态。这种功能叫做会话管理。
Cookie相当于服务器给浏览器下达的命令,让他记住发送给它的“名称=变量”这种格式的值。
记住Cookie值的浏览器,从此再向相同网站发送消息时,就会发送已被记住的Cookie值。
Cookie: PHPSESSID=at22nt7oe51799lnfmv8uib4v7
这里PHPSESSID的值被称为会话ID,是访问信息的关键。认证成功的用户ID保存在会话变量 $_SESSION[‘ID’]中。
- 会话ID的安全措施
- 不能被第三方推测:即生成的随机数要足够随机,一般采用电子政府的推荐列表。
- 不能被第三方劫持:劫持正规用户的ID进行攻击的手法成为会话固定攻击。可以通过认证后改变会话ID进行防范。
- 不能向第三方泄露
会话泄露的原因:
- 发行Cookie是指定的属性有问题
- 会话ID被监听
- 通过跨站脚本漏洞等应用中的安全隐患被泄露
- PHP存在安全隐患被泄露
- ID保存至URL中,通过Referer泄露。
Cookie的一些属性:
属性 | 含义 |
---|---|
Domain | Cookie发送对象服务器的域名 |
Path | 发送对象URL的路径 |
Expires | 有效期限,未指明则直到浏览器被关闭 |
Secure | 仅在SSL加密的情况发送Cookie |
HttpOnly | 指定了此属性Cookie不能被JavaScript访问 |
-
Domain属性
默认情况下只能被发送到被绑定的服务器上去。如果向多个服务器发送Cookie,就要用到此属性。
如果一个服务器在Set-Cookie中制定了Domain=另一个域名,那么Cookie会被浏览器忽略,因为如果可以在Cookie中指定不同域名就可能发生会话固定攻击。所以Cookie是不能指定不同域名的。
原则上不要设置Domain属性!! -
Secure属性
设置了Secure的Cookie仅在SSL传输的情况下被发送给服务器。未设置则是否为SSL都会传输。 -
HttpOnly属性
打开之后可以禁止JavaScript访问该Cookie。
session.cookie_httponly = on
cookie如何访问?
-
因为浏览器提供了 cookie 属性给 JavaScript,所以可以通过 document.cookie 来访问这个页面中的cookie。
-
F12后,在存储界面中找到cookie的值
此后在浏览器界面中加上后缀名cookie.php即可访问cookie界面 -
使用fiddler访问
可以直接在请求界面点击上界面框的Cookie选项进行查看。