声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课
一、概述
cookie的httponly设置。
二、cookie介绍
指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在用户浏览器(客户端)上的小文本文件, 它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。
目前有些Cookie是临时的,有些则是持续的。临时的Cookie只在浏览器上保存段规定的时间,-一且超过规定的时间,该Cookie就会被系统清除。
cookie的作用:
cookie是存储再客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行cookie交
互,通常用来存储一些不敏感信息。
三、cookie httponly
setcookie("abc", "test", NULL, NULL, NULL NULL, TRUE);设置secure参数为true之后,就不能使用js获取cookie。
使用如下代码设置cookie的httponly为TRUE, 即不能通过js读取cookie。
<?php
setcookie('Username','Passwd',NULL,NULL,NULL,TRUE,TRUE);
$id = $_GET['id'];
echo $id;
?>
XSS的payload:
<script>alert(document.cookie)</script>
将第七个参数(httponly)设置为FALSE,XSS就执行成功读取cookie值。
我们测试httponly位是对全部cookie有效,还是仅设置的那个cookie。修改cookie代码。
setcookie('TOP','TOPPPPP',NULL,NULL,NULL,TRUE,TRUE);
setcookie('Username','Passwd',NULL,NULL,NULL,TRUE,FALSE);
我们直接使用控制的测试。发现只能读取cookie设置为httponly的cookie。
httponly对单个cookie有效。
以下摘抄自https://www.w3cschool.cn/pegosu/ksiq7ozt.html
微软的 IE6 SP1 在 cookie 中引入了一个新的选项:HTTP-only
,HTTP-Only
背后的意思是告之浏览器该 cookie 绝不能通过 JavaScript 的 document.cookie
属性访问。设计该特征意在提供一个安全措施来帮助阻止通过 JavaScript 发起的跨站脚本攻击 (XSS) 窃取 cookie 的行为(我会在另一篇博客中讨论安全问题,本篇如此已足够)。今天 Firefox2.0.0.5+、Opera9.5+、Chrome 都支持 HTTP-Only cookie。3.2 版本的 Safari 仍不支持。
要创建一个 HTTP-Only cookie,只要向你的 cookie 中添加一个 HTTP-Only
标记即可:
Set-Cookie: name=Nicholas; HttpOnly
一旦设定这个标记,通过 documen.coookie
则不能再访问该 cookie。IE 同时更近一步并且不允许通过 XMLHttpRequest
的 getAllResponseHeaders()
或 getResponseHeader()
方法访问 cookie,然而其它浏览器则允许此行为。Firefox 在 3.0.6 中修复了该漏洞,然而仍旧有许多浏览器漏洞存在,complete browser support list 列出了这些。
你不能通过 JavaScript 设置 HTTP-only
,因为你不能再通过 JavaScript 读取这些 cookie,这是情理之中的事情。