稀土掘金 稀土掘金

禁止网站被iframe嵌套的几种方式

这是我参与8月更文挑战的第20天,活动详情查看: 8月更文挑战

前言

昨天写了一篇文章,是关于 iframe的跨域通信问题,是嵌套iframe,由于跨域导致不能与主页面通信的问题,然后提出了几种解决方案。

iframe跨域不能通信,但是页面还是可以展示。今天来讲讲如何限制网站不能被iframe嵌套,也就是页面都不能展示。

效果类似如下:

image.png

禁止iframe嵌套

第一种方式

  1. 添加X-Frame-Options响应头

这个响应头是用来是否允许网页通过iframe元素嵌套的,它有三个值

  • deny

    禁止,不允许任何网页嵌套,包括是同源的域名也不可以。

  • sameorigin

    只允许同源的域名访问

    • 比如https://test.aaa.com/abc嵌套https://test.aaa.com/test的网页,同源, 允许嵌套
    • 比如https://test.aaa.com/abc嵌套https://cp3.abc.com/test的网页,不同源,不可以嵌套
  • allow-from url

    允许url的域名可以嵌套,多个可以逗号隔开,比如allow-from http://aaa.com, 允许http://aaa.com嵌套本网页。

    谷歌浏览器不支持该设置allow-from,firefox可以

下面来实践一下:

新建一个文件

index.js

const http = require('http')
http.createServer((req, res) => {
  res.writeHead(200, {
   'Content-Type': 'text/html; charset=UTF-8',
   'X-Frame-Options': 'sameorigin'   // 只允许同源域名
  })
  res.end('hello 我是cp3!')
}).listen(8081)

console.log('服务已开启,请打开http://127.0.0.1:8081')

使用node index.js开启服务

image.png

然后新建一个页面a.html, 嵌入该页面

<div>
  <iframe src="http://127.0.0.1:8081" frameborder="0"></iframe>
</div>

再用 http-server开启一个服务,然后浏览器打开http://127.0.0.1:8080

image.png

image.png

可以了,生效了

设置Content-Security-Policy

Content-Security-Policy, 叫做内容安全策略,简称CSP,限定网页允许加载的资源策略,一定程度上防范外部的xss等攻击。

它可以设置很多限定策略,这里我们是要限定iframe的嵌套,所以用"Content-Security-Policy": "frame-ancestors 'self'"

const http = require('http')
http.createServer((req, res) => {
  res.writeHead(200, {
    'Content-Type': 'text/html; charset=UTF-8',
    "Content-Security-Policy": "frame-ancestors 'self'"
  })
  res.end('hello 我是cp3!')
}).listen(8081)

console.log('服务已开启,请打开http://127.0.0.1:8081')

生效了,效果如下:

image.png

image.png

通过窗口判断

根据当前的页面的顶级窗口window.top和自身窗口window.self是否相等

如果不相等,则是因为嵌入了iframe,因为iframe的自身窗口和顶级的窗口是不相等的。

  if (window.top != window.self) {
    window.top.location = window.self.location; // 替换顶级窗口的地址
  }

总结

以上就是禁止网站被iframe嵌套的几种方式

  • 添加X-Frame-Options响应头`
  • 设置Content-Security-Policy
  • 通过窗口判断

感谢大家的阅读。

代做工资流水公司天津流水账单费用上海开车贷银行流水长春流水查询滁州购房银行流水样本吉林工作收入证明西宁银行流水单代开宁波打印工资代付流水沧州做工资流水账单深圳银行流水单费用泉州转账流水公司漳州办流水湖州入职流水打印海口打印车贷工资流水德阳银行流水账价格中山对公银行流水代办揭阳开入职工资流水保定签证银行流水 打印贵阳开房贷工资流水包头打印购房银行流水湘潭贷款工资流水济南贷款流水代办漳州银行流水单查询惠州背调工资流水多少钱沈阳开转账流水福州代做工资流水app截图柳州制作薪资流水单车贷银行流水 代做深圳对公账户流水代办阜阳自存流水样本潍坊查车贷银行流水香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化