首页 > 其他分享 >设置 X-Frame-Options HTTP 响应头防止点击劫持攻击

设置 X-Frame-Options HTTP 响应头防止点击劫持攻击

时间:2023-08-21 10:37:27浏览次数:31  
标签:SAMEORIGIN 嵌入 HTTP Frame DENY Options 页面

X-Frame-Options 是一个 HTTP 响应头,设置 X-Frame-Options HTTP 响应头为 DENY 或 SAMEORIGIN,用于控制页面是否可以被嵌入到 <iframe>, <frame>, <embed>, 或 <object> 等元素中。这有助于防止点击劫持攻击。

DENY 或 SAMEORIGIN 分别是什么意思?

  1. DENY:

    • 当设置为 DENY 时,页面不能被嵌入到任何 <iframe>, <frame>, <embed>, 或 <object> 中,无论这些元素是在同一个网站上还是在其他网站上。
    • 这意味着其他任何网站都不能将此页面嵌入到它们的页面中。
    • 例如, 如果 example.com/page 设置了 X-Frame-Options: DENY, 那么无论是 example.com 还是 other-site.com, 都不能在其页面中嵌入 example.com/page
  2. SAMEORIGIN:

    • 当设置为 SAMEORIGIN 时, 页面只能被同一源 (origin) 的页面嵌入。
    • 这意味着只有与内容相同的协议、域名和端口的页面才能嵌入这个页面。其他所有的外部源都不能嵌入。
    • 例如, 如果 example.com/page 设置了 X-Frame-Options: SAMEORIGIN, 那么只有 example.com 上的其他页面可以嵌入它。其他域名,如 other-site.com, 不能嵌入这个页面。

不同服务器或应用框架设置X-Frame-Options的方法

根据您使用的服务器或应用框架,设置 X-Frame-Options 的方法可能会有所不同。以下是一些常见的服务器和框架的设置方法:

1. Apache HTTP Server:

.htaccess 文件或 Apache 配置文件中添加以下行:

Header set X-Frame-Options "DENY"

或者,如果你只允许同源页面嵌入:

Header set X-Frame-Options "SAMEORIGIN"

然后重启 Apache 服务器。

2. Nginx:

在 Nginx 配置文件的 serverlocation 区块中添加:

add_header X-Frame-Options "DENY";

或者:

add_header X-Frame-Options "SAMEORIGIN";

然后重启 Nginx。

3. Express (Node.js):

如果您使用的是 Express 框架,可以使用以下代码:

app.use((req, res, next) => { res.setHeader('X-Frame-Options', 'DENY'); next(); });

或者:

app.use((req, res, next) => { res.setHeader('X-Frame-Options', 'SAMEORIGIN'); next(); });

4. Django (Python):

在 Django 的 settings.py 文件中添加或修改以下设置:

X_FRAME_OPTIONS = 'DENY'

或者:

X_FRAME_OPTIONS = 'SAMEORIGIN'

然后,确保 django.middleware.clickjacking.XFrameOptionsMiddleware 中间件已被启用。

5. Flask (Python):

在 Flask 应用中,您可以使用以下代码:

@app.after_request def apply_caching(response): response.headers["X-Frame-Options"] = "DENY" return response

或者:

@app.after_request def apply_caching(response): response.headers["X-Frame-Options"] = "SAMEORIGIN" return response

以上是一些常见的服务器和框架的示例。

标签:SAMEORIGIN,嵌入,HTTP,Frame,DENY,Options,页面
From: https://www.cnblogs.com/shamo89/p/17645320.html

相关文章

  • HTTP中的Get和Post请求到底有什么区别?
    一、HTTP中的Get和Post请求到底有什么区别?1.HTTP诞生,是为了解决浏览器与服务器之间的通讯协议,GET用于读取资源,POST用于提交表单。2.后来被扩充到接口格式的定义,GET和Post作为接口的请求方式。二、协议核心四部分:Method:get/postUrl:UrlHeader:{}Body:{......
  • C# .NET 使用HttpClient,以及自定义Header中存在特殊字符的处理方式
    平常我们在使用HttpClient时,只需要创建加上设置调用接口地址就可以使用了,比如:HttpClienthttpClient=httpClientFactory.CreateClient();httpClient.BaseAddress=newUri(接口地址);httpClient.PostAsync(接口方法,HttpContent);但是,在自定义Header......
  • https简介
    HTTPS(全称:HyperTextTransferProtocolSecure)是超文本传输协议的安全版本。它用于在计算机网络上传输网页,特别是世界范围网上的网页。与HTTP相比,HTTPS的主要优势是,它通过使用加密协议(例如SSL/TLS)对数据进行加密,从而提供了一个安全的通道来保护用户的数据免受窃听、篡改和消息......
  • 软件测试|测试平台开发-Flask 入门:Flask HTTP请求详解
    简介上一篇文章我们介绍了flask的基本使用,编写了flask的第一个脚本。在本文中,我们将详细介绍如何使用Flask进行HTTP请求。我们将学习如何创建Flask应用程序,并通过不同的HTTP方法(GET、POST、PUT、DELETE等)发送请求。app.route()要使用不同的http方法发送请求,我们要先了解flask是如何......
  • 8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状
    当你使用GitLabAPI并收到状态码400,这通常意味着你发送的请求是“坏的”或格式不正确。以下是一些建议,帮助你解决问题:1.**验证请求正文**:确保你提供的请求正文(如果有的话)是正确的并符合API的预期格式。对于触发管道的API,你可能需要提供有关分支、变量等的信息。2.**检查URL*......
  • 请大家支持博客园,购买VIP会员,https://cnblogs.vip
    很多认识我的朋友都是读到我的文章而来的,博客园是国内最早的技术博客平台,近二十年来始终如一地保持本色,不忘初心,为广大的技术爱好者经营着一块相对干净的田地。我也是最早的一批博主之一吧,在那个物资还没有很丰富,相对单纯的年代,天南地北的朋友们,以文会友,追一些大牛的系列文章跟......
  • VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)
    VS2015里面没有.NETFramework4.6.2VS2015默认安装的目标框架最高是.NETFramework4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NETFramework4.6.2,项目就需要升级到目标框架.NETFramework4.6.2VS2015项目无法选择framework4.6.2的解决办法:第一步:系统环境安装.NET......
  • python+playwright 学习-74 set_extra_http_headers设置浏览器请求头部
    前言大部分网站保存登录状态是用cookies,也有个别网站是在请求头部添加token实现保存登录。playwright可以使用set_extra_http_headers()方法设置浏览器请求头部参数set_extra_http_headers()方法设置头部参数headers,字典键值对fromplaywright.sync_apiimportsync_pla......
  • 大厂 Framework 面试必备 Handler&Binder&AMS 面试题
    前言大家都知道现在AndroidFramework成为头部公司必不缺少的技术栈之一,尤其是熟悉Franmework源码的Android开发者,在面试中往往会占到很大的优势那我今天就带来AndroidFramework比较高刷的面试题分享,总共包含以下四大类:系统启动流程面试题解析Binder面试题解析Handler面......
  • k8s推送代码至gitlab报错error: RPC failed; result=22, HTTP code = 413 fatal: The
    #gitpush-uoriginmainUsernamefor'http://gitlab.wjl.net':rootPasswordfor'http://[email protected]':Countingobjects:1032,done.Deltacompressionusingupto8threads.Compressingobjects:100%(871/871),done.error:R......