http-only原理与防御XSS实践

news2025/2/28 11:39:30

目录

  • 预备知识
    • XSS攻击
  • 实验目的
  • 实验环境
  • 实验步骤一
    • 触发XSS漏洞
  • 实验步骤二
    • 引入Http-only
  • 实验步骤三
    • 验证http–only在防御XSS攻击时的作用

预备知识

XSS攻击

http-only的设计主要是用来防御XSS攻击,所以学习本实验的读者应首先了解XSS攻击的相关原理内容。
跨站点脚本攻击是困扰Web服务器安全的常见问题之一。跨站点脚本攻击是一种服务器端的安全漏洞,常见于当把用户的输入作为HTML提交时,服务器端没有进行适当的过滤所致。跨站点脚本攻击可能引起泄漏Web站点用户的敏感信息。为了降低跨站点脚本攻击的风险,微软公司的Internet Explorer 6 SP1引入了一项新的特性。
对于很多只依赖于cookie验证的网站来说,http-only cookies是一个很好的解决方案,在支持http-only cookies的浏览器中(IE6以上,FF3.0以上),Javascript是无法读取和修改http-only cookies,这样可让网站用户验证更加安全。

实验目的

1)了解http-only的作用及在Cookie中的存在方式。
2)掌握通过设置http-only防御XSS攻击。

实验环境

在这里插入图片描述
一台Windows XP主机。
主机部署实验测试网站。
主机安装Fiddler软件。

实验步骤一

触发XSS漏洞

在IE浏览器中访问本实验的测试网站:http://10.1.1.189/httponly-test/login.php。
注意,本实验一定要在IE中浏览网页,这是因为目前版本的IE没有XSS过滤器,方便我们做实验
此时我们打开fiddler工具抓包,返回浏览器,在登录框中输入用户ID:admin和密码:123456进行登录。登录后我们可以看到主界面:
在这里插入图片描述
在Fiddler中查看刚刚用于登录的HTTP包,观察响应头的Cookie字段(红色框内),记录下此时的cookie内容:
在这里插入图片描述
这里的昵称输入框由于没有对输入字符进行过滤,存在XSS漏洞。我们在框中输入“<script>alert(document.cookie);</script>”提交验证,结果弹出如下提示,从而验证了XSS漏洞的存在。(对于XSS不理解的读者一定要首先掌握XSS基本知识)
在这里插入图片描述
在网站建设过程中,由于编程人员安全意识薄弱或工作疏忽,很容易出现如上所示的XSS漏洞。恶意攻击者可以利用该种漏洞窃取用户Cookie信息,从而冒充用户身份访问网站。应对XSS攻击,可以采用对输入(输出)文本进行特殊字符过滤的方式,但由于网站业务类型复杂多样,且针对过滤也存在绕过方法,所以,仅仅通过过滤手段并不能完全解决XSS问题。Http-only的引入,就是从防止脚本读取Cookie的角度有效防御了XSS漏洞的攻击。

实验步骤二

引入Http-only

http-only具体怎样引入,又为何能解决XSS问题呢?
我们重新看步骤一中所抓取得http包,当我们输入用户名和口令进行登录操作时,服务器端对口令进行校验,如果成功,返回给我们登录信息,并且在返回数据包中包含了cookie信息,以便保存用户的登录状态。如这条cookie:

id=admin;expires=mon, 30-Nov-2020 08:53:35 GMT

它实质上包含了两个内容,一个是服务器端程序设定的用于保存用户身份标识的字段值(id=admin),另一个是这条cookie的过期时间。而步骤一中的XSS攻击做了什么呢?它利用JavaScript脚本,读取到了这条cookie,既然能读取到,那攻击者就更有办法把这条cookie为他所用,借用cookie中包含的身份标识假冒用户去登录网站。这时,如果能出台一种机制,禁止JavaScript脚本来读取cookie信息,那一切都得到了解决。攻击者即使成功发动了XSS攻击,获得了在用户浏览器端执行JavaScript脚本的能力,但由于脚本无法读取cookie,他仍然不能得到任何用户身份标识。
http-only字段,就是加在cookie身上的一个“护身符”。浏览器存在这种机制,只要cookie中含有Http-only字段,那么任何JavaScript脚本都没有权限读取这条cookie的内容。
所以,下边我们要改写服务器端代码,使用户重新登陆后,Cookie中附带上http­-only属性。找到源代码文件:C:\xampp\htdocs\httponly-test\login.php,右键选择EditPlus打开。注意不要用记事本修改php代码,否则会误添加BOM导致PHP无法正常解析。打开文件方法如下图所示:
在这里插入图片描述
找到下图所示两行代码,setcookie函数表示当验证用户合法登陆后,向用户浏览器中返回Cookie。
在这里插入图片描述
上图中的两条setcookie语句,在实际过程中就转变为服务器向客户端返回的两条cookie信息:

Set-Cookie:id=admin;expires=mon, 30-Nov-2020 08:53:35 GMT
Set-Cookie:pass=12346;expires=mon,30-Nov-2020 08:53:35 GMT

现在,我们修改setcookie方法参数,改为以下这种方式调用setcookie:
在这里插入图片描述
我们在setcookie方法的第七个传入参数中设置了变量TRUE,表示这个cookie具有HTTP-only属性。保存并退出文件。
回到浏览器中,首先把浏览器的Cookie清空。清空方法为打开菜单栏→工具→Internet选项,选择删除Cookie:
在这里插入图片描述
打开抓包软件Fiddler,重新登陆我们的测试网站。

http://10.1.1.189/httponly-test/login.php

登陆后在fiddler中观察数据包。
在这里插入图片描述
可以发现,这次服务器返回给用户浏览器的cookie中,两个字段都被添加上了http-only属性。这样从理论上,用户的身份标识cookie,因为有了http-only这个“护身符”,将令任何JavaScript脚本无可奈何。

实验步骤三

验证http–only在防御XSS攻击时的作用

我们接着步骤二的操作,现在我们已经成功登录进输入昵称的界面中。此时,这个输入框仍然存在反射型XSS漏洞,我们继续利用该漏洞点,尝试窃取cookie。在昵称输入框中输入:

<script>alert(document.cookie);</script>

点击提交,此时再观察弹出框:
在这里插入图片描述
此时发现,虽然XSS漏洞点依旧存在,但XSS的恶意利用脚本已无法获取到用户的Cookie,弹出的内容为空。这个实验结果成功验证向cookie中添加http-only字段的效果。通过这种方法,网站成功保护了用户的Cookie信息免遭攻击者窃取。
我们知道,防御XSS攻击的思路方法有很多。我们常见的,如在用户输入和输出端加过滤,过滤掉某些特殊字符,从而避免恶意JavaScript脚本的运行。而http-only,则是从另一角度考虑对XSS做防御,即使攻击者传进来的恶意JavaScript脚本得到运行,但我的用户cookie受到了保护,脚本无法读取cookie内容。这使得想利用XSS攻击窃取用户身份的想法化为泡影。在实战中,网站防御者们往往会综合利用到对字符做过滤和添加http-only属性的方式,对抗XSS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/9504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 2 如何添加 register-service-worker 以实现缓存请求的目的

Vue 2 如何添加 register-service-worker 以实现缓存请求的目的 一、问题描述 现在 vue 3 的模板中是自带 register-service-worker 的。 用这个的好处是&#xff0c;它会自动将项目中的所有文件请求缓存到 service-worker 中&#xff0c;以实现再次打开网站的时候会非常非常…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园二手物品交易系统051x4

做毕业设计一定要选好题目。毕设想简单&#xff0c;其实很简单。这里给几点建议&#xff1a; 1&#xff1a;首先&#xff0c;学会收集整理&#xff0c;年年专业都一样&#xff0c;岁岁毕业人不同。很多人在做毕业设计的时候&#xff0c;都犯了一个错误&#xff0c;那就是不借鉴…

HTB-Tier1

HTB-Tier1 Appointment Task 1 What does the acronym SQL stand for? ********** ***** *******e Structured Query Language Hide Answer Task 2 What is one of the most common type of SQL vulnerabilities? *** ********n sql injection Hide Answer Task …

汉字风格迁移篇----EasyFont:一个基于风格学习的系统,可以轻松构建大规模手写字体

文章目录abstract1 INTRODUCTION2 RELATED WORK3 METHOD DESCRIPTION3.1 Selecting Input Character Set3.2 Learning Font Skeleton Manifold3.2.1 Character Matching.3.2.2 Training the GP-LVM3.3 Text Segmentation3.4 Stroke Extraction3.5 Overall Style Learning3.5.1 …

UNet - 数据加载 Dataset

目录 1. 介绍 2. 数据处理 dataset 2.1 预处理 2.2 加载数据 2.2.1 初始化 2.2.2 返回数据 2.2.3 样本数量 3. 测试一下 4. 完整代码 1. 介绍 之前介绍完了Unet网络的搭建&#xff0c;接下来说一下要解决的任务。 本章介绍的是&#xff1a;数据的加载处理 下面是整…

hadoop 3.3大数据集群搭建系列1-安装hadoop

文章目录一. 软硬件配置1.1 主机配置及规划1.2 软件配置1.3 安装常用的工具二. 安装前准备2.1 设置主机名2.2 设置hosts2.3 关闭防火墙2.4 ssh免密登陆2.5 ntpdate时间同步三. 安装3.1 安装hadoop3.1.1 下载hadoop并解压3.1.2 配置hadoop_home环境变量3.1.3 编辑etc/hadoop/had…

【毕业设计】图像识别垃圾分类系统 - python 深度学习

文章目录0 前言1 简介2 识别效果3 实现3.1 数据集3.2 实现原理和方法3.3 网络结构4 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对…

信息熵,交叉熵,KL散度,互信息一网打尽

talk 一直以来都是自己有时候 想去搞明白就搜搜博客看&#xff0c;模棱两可&#xff0c;记忆也比较模糊&#xff0c;这次直接较为系统的记录一下&#xff0c;之后忘了也能看看~ 1. 信息熵 这个概念是从信息论出现的&#xff0c;是香农定义的&#xff0c;根据事件发生的概率进…

excel怎么设置密码?加密文件这么做!

我们都知道&#xff0c;很多时候需要我们在电脑上保存很多excel文件。为了避免在工作中出现意外&#xff0c;我们需要在文件中设置一个安全密码。那么&#xff0c;电子表格excel怎么设置密码呢&#xff1f;如果我们设置了密码&#xff0c;想要取消原本的密码或者重新设置一个密…

Windows无法启动这个硬件设备(代码19)怎么办?

在我们使用电脑的过程中&#xff0c;遇到“由于其配置信息(注册表中的)不完整或已损坏&#xff0c;Windows无法启动这个硬件设备&#xff08;代码19&#xff09;”的提示时该如何解决呢&#xff1f; Windows无法启动这个硬件设备&#xff08;代码19&#xff09;&#xff0c;如何…

干货整理| 深度学习入门知识

一、深度学习的定义 深度学习&#xff08;Deep Learning&#xff09;&#xff0c;简称&#xff1a;DL&#xff0c;是一种实现机器学习的技术。 人工智能&#xff08;AI&#xff09;的概念是在1955 年提出的&#xff1b;机器学习&#xff08;ML&#xff09;概念是在1990 年提出…

springboot 整合clickhouse

最近需要做一个项目 需要整合clickhouse 本来有现成的项目&#xff0c;复制一下就好了。但是想自己从头开始一个个文件搭建 但是还是遇到了很多坑&#xff0c; 这就是传说中的约定优于配置吗 1 首先第一步application启动的时候 启动完了&#xff0c;就会退出&#xff0c…

[附源码]计算机毕业设计JAVA房屋租赁管理系统

[附源码]计算机毕业设计JAVA房屋租赁管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

C++QT实现压缩文件、文件夹和解压缩操作

一、前言 QZipWriter是用来压缩文件的类&#xff0c;需要在安装Qt是选择Sources源码安装。否则&#xff0c;无法使用QZipWriter。 1. QZipWriter函数说明 1.1 构造方法&#xff1a; QZipWriter(const QString &fileName, QIODevice::OpenMode mode (QIODevice::WriteOnl…

控制游戏人物移动的细节到底有多少?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 unity实战入门 在游戏中我们在做控制游戏物体移动时会碰到以下常见的几种情况&#xff1a; 文章目录在游戏中…

adb shell AT指令发送短信

开启两个&#xff0c;命令行窗口。都进入adb shell。 查看 /dev下的smd设备节点&#xff0c;选取一个进行读写操作 一个窗口用来进行读&#xff0c;另一个窗口进行写入指令操作&#xff0c;读取和写入的节点需要一致。 SH4-1:/ # ls /dev/smd* ls /dev/smd* /dev/smd11 /dev/…

隐式神经表示一:神经网络拟合图像Implicit Neural Representations with Periodic Activation Functions

文章目录1. Implicit Neural Representations with Periodic Activation Functions0. 什么是隐式神经表示1. 了解SineLayer的初始化&#xff0c;还是没了解。。。2. 均匀分布3. Lemma 1.14. 一个简单实验, 拟合图像4.1 网络模型代码如下&#xff0c;就是全连接网络&#xff0c;…

【自然语言处理(NLP)】基于BiLSTM+CRF的事件抽取

【自然语言处理&#xff08;NLP&#xff09;】基于BiLSTMCRF的事件抽取 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国高等学…

Centos 7 安装 wget

文章目录1. wget命令详解:2.查看帮助手册3.使用 wget 下载单个文件4.使用 wget -O 下载并以不同的文件名保存5.使用 wget -c 断点续传6.使用 wget -b 后台下载1. wget命令详解: wget是Linux中的一个下载文件的工具&#xff0c;wget是在Linux下开发的开放源代码的软件&#xff…

tomcat线程池-深度分析tomcat线程池设计与现实

1.概述 在正式进入Tomcat线程池之前&#xff0c;小伙伴们可以先回顾一下JDK中的线程池相关特性&#xff0c;对于JDK线程池的总结和源码的解析感兴趣的童鞋&#xff0c;也可参考博主的层层剖析线程池源码的这篇文章&#xff0c;文章主要讲述对线程池的生命周期&#xff0c;核心参…