[理论-学习]Web安全-XSS-基础21

本文介绍了HTTP-Only Cookie的概念和作用,它是一种防止XSS攻击的安全措施,使得JavaScript无法访问特定cookie,增加了用户数据的安全性。通过PHP的setcookie函数演示了如何设置HTTP-Only Cookie,并通过实例说明其对单个cookie的有效性。
摘要由CSDN通过智能技术生成

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课

一、概述

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-onlyHTTP-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,这是情理之中的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值