当前位置: 首页 > article >正文

【Django】Clickjacking点击劫持攻击实现和防御措施

Clickjacking点击劫持

  • 1、clickjacking攻击
  • 2、clickjacking攻击场景

1、clickjacking攻击

clickjacking攻击又称为点击劫持攻击,是一种在网页中将恶意代码等隐藏在看似无害的内容(如按钮)之下,并诱使用户点击的手段。

2、clickjacking攻击场景

用户进入到一个网页中,里面包含了一个按钮(查看照片),但是这个按钮上面加载了一个透明的iframe标签,这个iframe标签加载了另外一个网页,并且他将这个网页的某个按钮和网页中的按钮(查看照片)重合,所以你在点击按钮(查看照片的时候)实际上点的是通过iframe加载的另外一个网页的按钮,比如我现在有一个csdn的用户账号,现在想要用户点击关注。那么我们就可以准备以下页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Clickjacking</title>
    <style>
        iframe {
            width: 100%;
            height: 100%;
            display: block;
            position: absolute;  /*指定iframe和button为绝对定位*/
            z-index: 20;  /*指定在垂直方向上的高低*/
            opacity: 0.01;
            /*指定透明度*/
            <!--注意,iframe的透明度不能设置为0,如果设置为0的话,就不能接受任何的点击事件了-->
        }
        button {
            position: absolute;
            left: 40px;
            top: 65px;
            z-index: 10;
        }
    </style>
</head>
<body>
<h2>哇塞,这张照片里怎么会有我!快来看看有没有你吧!</h2>
<button>查看照片</button>
<iframe src="https://blog.csdn.net/zjy123078_zjy/" frameborder="0"></iframe>
</body>
</html>

clickjacking防御:我们可以设置我们的网页不允许使用iframe被加载到其他网页中就可以避免这种情况了,我们可以通过在响应头中设置X-Frame-Options来设置这种操作,X-Frame-Options可以设置以下三个值:

  1. DEBY:不允许任何网页使用iframe加载我这个页面。
  2. SAMEORIGIN:只允许在相同域名(也就是自己的网站)下使用iframe加载这个页面。
  3. ALLOWED-FROM origin: 允许任何网页通过iframe加载我这个网页。


    在Django中,使用中间件django.middleware.clickjacking.XFrameOptionsMiddleware可以帮我们堵上这个漏洞,这个中间件设置了一个X-Frame-Option为DENY,也就是不允许任何网页使用iframe加载这个网页,这样就可以避免其他的别有用心的网页去通过iframe加载了。

    我们可以查看一下网页源代码,如下:
class XFrameOptionsMiddleware(MiddlewareMixin):
    """
    Set the X-Frame-Options HTTP header in HTTP responses.

    Do not set the header if it's already set or if the response contains
    a xframe_options_exempt value set to True.

    By default, set the X-Frame-Options header to 'SAMEORIGIN', meaning the
    response can only be loaded on a frame within the same site. To prevent the
    response from being loaded in a frame in any site, set X_FRAME_OPTIONS in
    your project's Django settings to 'DENY'.
    """
    def process_response(self, request, response):
        # Don't set it if it's already in the response
        if response.get('X-Frame-Options') is not None:
            return response

        # Don't set it if they used @xframe_options_exempt
        if getattr(response, 'xframe_options_exempt', False):
            return response

        response['X-Frame-Options'] = self.get_xframe_options_value(request,
                                                                    response)
        return response

    def get_xframe_options_value(self, request, response):
        """
        Get the value to set for the X_FRAME_OPTIONS header. Use the value from
        the X_FRAME_OPTIONS setting, or 'DENY' if not set.

        This method can be overridden if needed, allowing it to vary based on
        the request or response.
        """
        return getattr(settings, 'X_FRAME_OPTIONS', 'DENY').upper()


所以,在我们使用django创建项目的时候,默认的情况下,Django就会默认的帮我们定义一个处理“点击劫持攻击”的中间件,默认情况下就是开启的


http://www.kler.cn/a/389885.html

相关文章:

  • 物理设备命名规则(Linux网络服务器 15)
  • Oracle 11g rac 集群节点的修复过程
  • mysql 实现分库分表之 --- 基于 MyCAT 的分片策略详解
  • Matlab自学笔记四十一:介绍日期时间型的显示格式:年‘y‘ 月‘M‘ 日‘d‘ 周‘e‘ 时‘h‘ 分‘m‘ 秒‘s‘
  • SCUI Admin + Laravel 整合
  • window下安装rust 及 vscode配置
  • 数组类算法【leetcode】
  • 「IDE」VS2022插件 Visual Assist X 番茄助手介绍说明
  • Python小游戏24——小恐龙躲避游戏
  • 使用 Elasticsearch 构建食谱搜索(一)
  • RSTP的配置
  • DNS Resolver解析服务器出口IP查询
  • 2024 年 Apifox 和 Postman 对比介绍详细版
  • vue3 动态路由+动态组件+缓存应用
  • 华为数通HCIA系列第5次考试-【2024-46周-周一】
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.9-4.10
  • 计算机课程管理:Spring Boot实现的工程认证框架
  • 基于FPGA FPD-Link(LVDS7:1)与FPD-Link IIIII实现与定制
  • 人才流失预测模型(机器学习)
  • SpringBoot中的响应式编程和WebFlux入门
  • Unity——配置文件的使用
  • ceph介绍和搭建
  • 无人驾驶汽车——AI技术在交通领域的进展与未来展望
  • C语言 | Leetcode C语言题解之第560题和为K的子数组
  • 学习笔记大导航
  • GitHub Org如何运营