点击劫持:X-Frame-Options 未配置

news2024/10/7 12:20:39

前言

X-Frame-Options作为HTTP头的一部分,是一种用于保护网站免受点击劫持攻击的安全措施。网站可以通过设置X-Frame-Options或csp报头来控制网站本身是否可以被嵌套到iframe中。

漏洞描述

Clickjacking(点击劫持)是一种安全漏洞,通常出现在网站未配置适当的安全标头时,该漏洞由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在2008年提出的。当网站未配置X-Frame-Options头时,它可能受到点击劫持攻击的威胁。这意味着攻击者可以在其恶意网站中将目标网站嵌套到iframe中,并引导用户执行未经授权的操作,使用户不知情地与目标网站互动。

漏洞危害

未配置X-Frame-Options头可能导致以下危害:

  • 用户被欺骗执行不希望执行的操作。
  • 用户的敏感数据(如用户名和密码)可能被窃取。
  • 网站的访问量可能被滥用,用于刷点击量或推广不良内容。
  • 攻击者可能传播恶意软件或进行其他恶意活动。

利用场景

点击劫持的利用场景如:刷点击量、骗取关注、点击广告或链接、点击广告或链接等。以刷点击量为例,假设存在某个场景,并描述其利用方式

假设a博客网站未配置X-Frame-Options头,小明在该博客网站上发布了一篇博客,现在小明想利用点击劫持来刷该博客的访问量,那小明可能采用的点击劫持攻击来刷博客访问量的过程如下:

  1. 博客网站未配置X-Frame-Options头:博客网站的管理员未正确配置X-Frame-Options头,这意味着博客网站的内容可以被嵌套到iframe中。
  2. 小明创建恶意网站:小明创建了一个恶意网站,其中包含了点击劫持攻击的代码。
  3. 在恶意网站上嵌套博客:小明在他的恶意网站中创建一个透明的iframe,将博客网站的URL嵌套到iframe中。用户访问小明的恶意网站时,他们可能看到一个吸引人的内容,而不知道博客网站的内容也被加载到了iframe中。
  4. 引导用户进行点击操作:小明可能在恶意网站上提供吸引人的内容,例如奖品抽奖、免费资源等,并引导用户执行点击操作。
  5. 触发点击劫持:当用户在恶意网站上执行点击操作时,iframe中的博客网站也会接收到相同的点击操作。
  6. 用户点击被计入博客网站访问量:尽管用户认为他们只是在小明的恶意网站上与吸引人的内容互动,但实际上他们的点击操作也被重定向到了博客网站上。这将导致博客网站的访问量增加。
  7. 小明达到他的目标:小明的目标是刷博客的访问量,他可能通过引导更多用户来访问他的恶意网站,从而增加博客网站的访问量。

这个过程说明了如何利用点击劫持攻击来增加博客网站的访问量,尽管用户不清楚他们的点击操作实际上也在访问博客网站。

判断是否存在点击劫持问题

  1. 查看响应头是否存在“X-Frame-Options: ”或 “Content Security Policy”报头,如果在响应头中找不到"X-Frame-Options"报头,并且不存在Content Security Policy(CSP)报头。那么网站可能存在点击劫持漏洞。

为了判断的准确性,可以进行下一步判断

  1. 在本地新建一个html文件,src = 'url' 中填写要测试的网站
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>点击劫持示例</title>
  </head>
  <body>
    <h1>点击劫持示例页面</h1>
    <button id="clickMe">点击我</button>

    <iframe id="evilIframe" style="opacity: 0;"></iframe>

    <script>
      document.getElementById('clickMe').addEventListener('click', function() {
        // 在点击按钮时,触发iframe中的操作
        document.getElementById('evilIframe').style.opacity = '1';
        document.getElementById('evilIframe').src = 'https://stack.chaitin.com';
      });
    </script>
  </body>
</html>

代码说明:

  • <iframe> 元素中,style="opacity: 0;":通过将opacity样式设置为0,使该iframe最初是不可见的。src属性:在此示例中,src属性被省略了,因此最初没有指定要加载的内容。
  • document.getElementById('clickMe').addEventListener('click', function() {...}):这行代码为按钮添加了一个点击事件监听器。当用户点击按钮时,以下操作将被执行:
    • document.getElementById('evilIframe').style.opacity = '1';:这行代码将第一个<iframe>元素的opacity样式设置为1,使其变得可见。
    • document.getElementById('evilIframe').src = 'https://stack.chaitin.com';:这行代码将第一个<iframe>元素的src属性设置为"https://stack.chaitin.com",导致该iframe加载该网站的内容。
  1. 点击 点击我,如果成功加载了目标网站,说明目标网站可以被其他网站嵌入 ,存在点击劫持问题

https://stack.chaitin.com 未设置X-Frame-Options或csp报头,所以其他网站可以将其嵌入

将加载的网站换为baidu,可以看到百度的响应头设置了csp报头

尝试嵌入百度网页,失败

修复方式

  1. 使用"X-Frame-Options"报头:在Web服务器上配置"X-Frame-Options"报头,以明确指定哪些网站可以嵌套您的网站内容。您可以将其设置为以下值之一:
    • "DENY":不允许任何网站嵌套您的内容。
    • "SAMEORIGIN":只允许相同域名的网站嵌套您的内容。
    • "ALLOW-FROM uri":只允许特定URI指定的网站嵌套您的内容。
  1. 使用Content Security Policy(CSP):CSP是一种更强大的安全机制,可以通过策略指令来控制网页的行为,包括防止iframe嵌套攻击。
  2. 显示安全性提示:在您的网页上显示安全性提示,通知用户他们正在访问的页面是受保护的,可以帮助减少点击劫持的风险。
  3. 不要使用透明iframe:避免在您的网站上使用透明的iframe元素,因为攻击者通常会利用这种情况。
  4. 更新浏览器:鼓励用户使用最新版本的浏览器,因为现代浏览器通常会实施一些保护机制来防止点击劫持攻击。

修复点击劫持漏洞是非常重要的,以保护用户和网站的安全。以上措施可以提高网站的安全性,但根据具体情况,可能需要结合其他安全措施来提高保护水平。

csp

如果一个网站的响应头中存在Content Security Policy(CSP)报头,但没有X-Frame-Options报头,那么通常情况下,这个网站不存在点击劫持问题。CSP报头可以提供更强大的安全性控制,包括防止点击劫持攻击。

CSP允许网站管理员指定哪些内容和资源可以加载到网页中,以及如何加载这些内容。其中一个CSP指令是frame-ancestors,它用于指定哪些页面可以嵌套当前页面。如果CSP报头中包含适当的frame-ancestors策略,它将限制哪些网站可以将该网站嵌套到iframe中,从而防止点击劫持攻击。

例如,以下是一个CSP报头示例,其中包含frame-ancestors指令:

cssCopy code
Content-Security-Policy: frame-ancestors 'self' example.com

上述策略将只允许网站自身('self')和example.com将该网站嵌套到iframe中。如果其他网站尝试嵌套该网站,浏览器会拒绝加载。

总之,CSP报头通常提供更强大的安全性控制,可以防止点击劫持攻击,前提是它们正确配置并包括适当的frame-ancestors策略。因此,如果网站启用了CSP,并且CSP策略正确配置,那么它通常不会存在点击劫持问题,即使没有X-Frame-Options报头。但是,确保正确配置CSP非常重要,以确保其有效性。

补充

X-Frame-Options可以将其配置在整个网站上,也可以在每个页面上单独配置。

如下网站的一个页面未配置xfo

该页面可以被嵌套

然后网站的登录页面设置了相关标头

导致嵌入失败

参考:X-Frame-Options响应头防点击劫持-CSDN博客

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

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

相关文章

Java项目调用Python脚本(基于idea)

前期准备 1.首先需要在本地环境中安装配置python环境 Python(含PyCharm及配置)下载安装以及简单使用(Idea) 博主本次使用python版本为py3.7.3 2.idea安装python插件 位置&#xff1a;File->Settings->Plugins->python->安装后重启即可 3.引入jython依赖 &l…

jupyter notebook如何实现代码提示功能?

jupyter notebook在数据分析中使用非常方便&#xff0c;但是没有代码提示功能&#xff0c;让人感觉有一点点遗憾&#xff1f;如何实现代码提示功能呢&#xff1f;以下实现亲测有效。 本人python版本是3.8. 首先关闭jupyter notebook&#xff0c;安装相关的库。 一、需要提前…

服务器崩溃前的数据拯救实践

前言 在服务器的VMWARE ESXi系统环境中&#xff0c;我们经常需要创建虚拟机来运行各种应用程序。然而&#xff0c;服务器如果偶尔出现自动重启以及紫屏报错的问题&#xff0c;说明服务器内部出现了故障&#xff0c;一般情况下重启机器能够解决问题&#xff0c;但时间一长&…

《风向》——如何应对互联网变革下的知识焦虑不确定与个人成长

二十多年来&#xff0c;全球电信业发生了翻天覆地的变化。通信技术实现了全面数字化&#xff0c;并且由有线发展到了无线&#xff0c;由铜缆升级到了光缆&#xff0c;由窄带跃迁到了宽带&#xff0c;从“大哥大”换成了智能手机&#xff0c;从打电话扩展到了上网&#xff0c;由…

2024第八届杭州国际智慧城市博览会:建筑与智能,智慧与未来

浙江&#xff0c;中国最具活力的省份之一&#xff0c;将再次迎来一场盛大的智慧城市行业展会。2024年第八届浙江智慧城市博览会&#xff0c;由浙江省土木建筑学会发起主办&#xff0c;以“探索未来&#xff0c;智能引领”为主题&#xff0c;于2024年4月份在美丽的杭州国际博览中…

养老院一键报警的重要性和应用

盾王养老院一键报警的重要性和应用 首先&#xff0c;一键报警装置能够极大地提高养老院的安全性。老年人由于身体机能下降&#xff0c;往往容易成为犯罪分子的目标。而一键报警装置能够在遇到危险情况时&#xff0c;立即向养老院管理人员发送警报&#xff0c;从而及时采取措施…

力扣第501题 二叉树的众数 c++ (暴力 加 双指针优化)

题目 501. 二叉搜索树中的众数 简单 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 …

C++入门篇---(1)命名空间与缺省参数

1.前言: c兼容C语言,C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库&#xff0c;以及编程范式等。 因此你可以理解为c是在c语言的基础上进行扩展的升级版. 它补充了C语言语法的不足&#xff0c;以及C是如何对C语言设计不合理…

【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

如何优化前端图像和多媒体资源?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【Redis】Set集合相关的命令

目录 命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREMSINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令 SADD 将⼀个或者多个元素添加到set中。注意&#xff0c;重复的元素⽆法添加到set中。 SADD key member [member ...]SMEMBERS 获取⼀个set中的所有元素&#xff0…

【RocketMQ】RocketMQ5.0新特性(一)- Proxy

为了向云原生演进&#xff0c;提高资源利用和弹性能力&#xff0c;RocketMQ在5.0进行了架构的调整与升级&#xff0c;先来看新特性之一&#xff0c;增加了Proxy层。 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构&#xff0c;将计算层与存储层分开。 计算层指的是…

There was an error committing your changes: File could not be edited

使用github完成commit changes时报的一个错误&#xff0c;最终原因是没有填写Extended description

初学vue,想自己找个中长期小型项目练练手,应该做什么?

前言 可以试着做一两个完整的后台管理项目后再去做其他的&#xff0c;下面推荐一些github上的vue后台管理的项目&#xff0c;可以自己选择性的练一下手 Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架&#xff0c;提供了一系列的强大组件和基…

湖州OLED透明拼接屏技术应用引领现代化旅游观光方式

湖州市位于中国浙江省北部&#xff0c;拥有悠久的历史和丰富的文化遗产。湖州市以其美丽的湖泊和秀丽的自然风光而闻名。 作为中国重要的历史文化名城之一&#xff0c;湖州市有着丰富的文化遗产和历史资源&#xff0c;如古城墙、古建筑和古镇等。 这为OLED透明拼接屏技术的应用…

一文讲解图像梯度

简介&#xff1a; ​ 图像梯度计算的是图像变化的幅度。对于图像的边缘部分&#xff0c;其灰度值变化较大&#xff0c;梯度值变化也较大&#xff1b;相反&#xff0c;对于图像中比较平滑的部分&#xff0c;其灰度值变化较小&#xff0c;相应的梯度值变化也较小。一般情…

C++标准模板(STL)- 类型支持 (数值极限,round_style,is_iec559,is_bounded)

数值极限 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits<int>::max() &…

聚观早报 | 首个“5G-A智慧家庭”发布;李鹏称5G-A是5G发展选择

【聚观365】10月12日消息 首个“5G-A智慧家庭”发布 李鹏称5G-A是5G发展的自然选择 新版努比亚Z50S Pro开售 英特尔锐炫A580显卡全球同步上市 vivo X100系列年底登场 首个“5G-A智慧家庭”发布 在全球移动宽带论坛&#xff08;MBBF2023&#xff09;期间&#xff0c;du联合…

中国长序列地表冻融数据集(1978-2015)

简介&#xff1a; 中国长序列地表冻融数据集——双指标算法(1978-2015)采用SMMR&#xff08;1978-1987&#xff09;、SSM/I&#xff08;1987-2009&#xff09;和SSMIS&#xff08;2009-2015&#xff09;逐日亮温数据&#xff0c;由双指标&#xff08;TB,37v&#xff0c;SG&…

【C++进阶之路】C++11(中)

一、可变参数模板 1.基本概念 想要了解C语言的可变参数列表的原理可见&#xff1a;可变参数列表 这个跟C语言的可变参数列表有一定的关系,常用的printf与scanf的参数就包含可变参数列表。 那么可变参数模板是什么呢&#xff1f;举个例子便一目了然。 template<class...Arg…