先来结论:

方案一:绕过身份验证:https://www.cnblogs.com/JaSonS-toy/p/4939805.html(我不是这样实现,可以自行尝试)

方案二:

1、保证请求的ip与请求zabbix的ip一致

  1.在nginx中增加一个路由跳转到zabbix

  2.添加白名单(不然其他域名也能内嵌这个页面)

    2-1.nginx添加headers_more模块(卸载后重新编译)
    2-2.nginx修改响应头X-Frame-Options(因为chrome和firefox不支持 ALLOW-FROM,所以要做步骤三)
    2-3.nginx添加响应头Content-Security-Policy(添加白名单)

2、嵌入页面后,可以选择让用户自行登录,或者后端调取zabbixAPI获取token,返回前端,前端document.cookie='zbx_sessionid={{token}}'

本质上,我把zabbix嵌到我的页面,然后请求我的服务器tp.abc.cn/zabbix,nginx转发到zabbix.abc.cn,zabbix.abc.cn返回给nginx,nginx修改响应头,再返回给客户端。过程中你不需要修改zabbix服务器的任何东西。

过程分析:

1、网上很多人说到Zabbix下的 include/defines.inc.php 文件,把define('X_FRAME_OPTIONS', 'SAMEORIGIN');改为define('X_FRAME_OPTIONS', null);
但实测是不行的,即使改了请求头依然是“X_FRAME_OPTIONS=SAMEORIGIN”。官网也明确表示不能跨域请求了:https://www.zabbix.com/forum/zabbix-help/361685-change-x_frame_options-do-not-work 

2、也有人说可以绕过身份验证,但因为zabbix是运维负责的,我懒得去做绕过身份校验(其实是不会php)

3、所以只能想办法,实现如官网所说的把zabbix的域名和框架中的域名一致(例如zabbix的域名是zabbix.abc.cn,框架的域名是tp.abc.cn)。我的实现方式是在nginx中增加一个路由跳转到zabbix,这样就可以通过访问tp.abc.cn/zabbix请求zabbix.abc.cn。

4、不能让别人也能通过访问tp.abc.cn/zabbix嵌入zabbix页面吧,所以能不能改成使用白名单呢?理论上响应头里的东西都是可以自定义设置的,但是nginx默认只能增加请求头。即哪怕你加了“X_FRAME_OPTIONS=ALLOW-FROM tp.abc.cn”,请求头中原带的“X_FRAME_OPTIONS=SAMEORIGIN”依然存在。如果想修改则要添加headers_more模块(自行百度添加,有人说可以动态添加,我只尝试了卸载后重新添加)。实践发现即使把X_FRAME_OPTIONS改成ALLOW-FROM,也没有起到白名单作用(因为chrome和firefox不支持 ALLOW-FROM),所以要使用响应头Content-Security-Policy设置白名单

注意:测试环境中,虽然嵌入的页面能访问到zabbix,但是登录成功也不会跳到监控页面。因为此时域名依然是不同的,zabbix返回的Set-Cookie没有设置SameSite=None,在跨域时chrome不会进行Set-Cookie操作

网页嵌入zabbix页面(不同域名)的更多相关文章

  1. WebIM(5)----将WebIM嵌入到页面中

    在之前的文章中,已经开发了一个简单的WebIM,但是这个WebIM是在独立的页面中的,今天发布的WebIM是一个可以嵌入到自己网页中的版本,你只需添加少量的代码,就可以在页面中嵌入一个WebIM.不过 ...

  2. android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具

    Android设备打印比较麻烦,一般设备厂商都提供原生app开发的SDK,我们web开发者为难了,不会原生开发啊 给大家提供一个思路,实现web加壳,利用打印浏览器实现 简单来说就是把我们的web页面 ...

  3. Flex嵌入HTML页面

    这段时间一直在苦心研究Flex,今天突然想,我们平时都是把swf放到网页中,怎么才能把网页嵌入到Flex中呢?我查了一些资料,然后经过自己的不懈努力,终于搞定. 为了方便,写了个嵌入HTML页面的代理 ...

  4. SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子

    SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...

  5. Zabbix页面管理

    Zabbix页面管理 Screen Screen翻译成中文为"屏幕",在一些交通管理中心.保安监控.预警中心等等地方都比较常见到监控视频,视频上有多块小视频,实际上Zabbix S ...

  6. https的页面内嵌入http页面报错的问题

    1.https的页面内嵌入http页面报错 在HTTPS的页面上嵌入http的页面时,浏览器会直接报错.比如在HTTPS页面上用 iframe 直接嵌入一个 http 页面,比如我们可以在百度上直接嵌 ...

  7. from表单iframe原网页嵌入

    今天是巩固的from表单跟嵌入其他页面,同样的,学习到了新的知识. 温故而知新: iframe--在原页面嵌入其他页面,以窗口的样式 其中scrolling--滚动条 noresize--可调整大小 ...

  8. Zabbix页面遇到历史记录的乱码需要修改数据库

    Zabbix页面遇到历史记录的乱码需要修改数据库: 解决办法: 1.将 zabbix 数据库中的表备份: 2.手动删除 zabbix 数据库: 3.重新创建 zabbix 库时手动指定字符集为 utf ...

  9. 网页嵌入WMP代码(转)

    网页嵌入WMP代码 播放器代码解释,装了9.0或9.0以上的播放器才能正常使用: OBJECT id="WMP" height="176" width=&quo ...

随机推荐

  1. class 中的 构造方法、static代码块、私有/公有/静态/实例属性、继承 ( extends、constructor、super()、static、super.prop、#prop、get、set )

     part 1         /**          * << class 中的 static 代码块与 super.prop 的使用          *          * - ...

  2. thinkphp5.1打印SQL语句

    最近在写tp框架搭建的小玩具,有时候我们需要查看SQL语句.所以就诞生了这篇随笔,命令如下: $xxx=db('xxx')->where('x',xx)->select(); $sql=D ...

  3. Django 使用Pycharm 创建工程

    一.Pycharm 创建Django 工程 事实上,我们一般不使用命令行,而是直接在Pycharm 中创建Django 项目. Pycharm 是进行Django 开发的最佳 IDE,请大家自行安装, ...

  4. Elasticsearch中text与keyword的区别

    text类型 1:支持分词,全文检索,支持模糊.精确查询,不支持聚合,排序操作; 2:test类型的最大支持的字符长度无限制,适合大字段存储: 使用场景: 存储全文搜索数据, 例如: 邮箱内容.地址. ...

  5. 安装ceph (快速) 步骤一:预检

    官网地址:http://docs.ceph.org.cn/start/ 预检 安装一个 ceph-deploy 管理节点和一个三节点的Ceph 存储集群来研究 Ceph 的基本特性.这篇预检会帮你准备 ...

  6. CentOS7 安装 Git 服务器

    1.安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum ...

  7. AlertManager 之微信告警模板,UTC时间错8个小时的解决办法

    注意事项: alertmanager中的web页面显示的报警时间是UTC时间,错8个小时,企业微信报警模板中已经修改过来了 下面配置可以作为参考: 1.prometheus操作 1.1 配置告警规则, ...

  8. echarts 改变个别省份的边界线颜色

    想要实现地图,首先要引入china.js文件,如果有引入就直接调过本步骤去下方看代码,没有引入可以点击下方链接自行Ctrl c + Ctrl v china.js import "../.. ...

  9. 【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race

    一.开发背景 你好,我是 @马哥python说 ,这是我用Python开发的全球疫情动态条形图,演示效果: https://www.zhihu.com/zvideo/15603276220259696 ...

  10. HDU1712 ACboy needs your help(分组背包)

    每种课程学习不同天数可以获得不同价值,这可以看成一个组,那么题目就是分组背包的模板题了. 1 #include<cstdio> 2 #include<cstring> 3 #i ...