html不是顶级域名,HTML iframe 标签支持某一顶级域名下的所有泛域名,限制其他顶级域名的展示实现...

本文通过调整X-Frame-Options及Content-Security-Policy响应头,解决了特定域名下的页面只能在同域名框架中显示的问题,并确保了不同浏览器间的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在 360 浏览器 兼容模式下,出现 此内容不能显示在一个框架中 的提示,如图1

此内容不能显示在一个框架中

为了帮助保护在此网站中输入的信息的安全,此内容的发布者不允许在框架中显示该信息。

1dc198547ba8365342b9bdf716a53d33.png

图1

2、查看网页源代码,确定是由于 iframe 且是因为网址不一致导致,如图2

5436a0e8a541848e54db15faf3546738.png

图2

3、进一步分析,根源在于 响应标头 中包含:X-Frame-Options: SAMEORIGIN,如图3

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options

表示该页面可以在相同域名页面的 frame 中展示(即仅能够在tv域名下展示)。

f19d3ce4680e4d428e39765f45a2a40f.png

图3

4、在本地新建1个虚拟主机,tv.eastobacco.dev,且新建对应的页面 header.html,如图4

1ab13dbda4624c94bdfe0664d7077581.png

图4

5、设置 tv.eastobacco.dev 的响应头:X-Frame-Options: SAMEORIGIN,如图5

33f2b2e8418619093d68e4e8e8a15419.png

图5

6、在本地新建1个虚拟主机,mytv.eastobacco.dev,且新建对应的页面 index.html,如图6

216db35431f20b03c0c645e4b824b1e3.png

图6

7、在本地复现:此内容不能显示在一个框架中,如图7

9b80d12683c6325e235774e07aeaddc5.png

图7

8、tv.eastobacco.dev,新建对应的页面 index.html,包含本域名的 header.html, 如图8

d5feda3ec235f578862f4b53ff7ed586.png

图8

9、此内容不能显示在一个框架中的提示已经不存在,如图9

ad2e51c9f4f5ed97d0317cf77a2381ce.png

图9

10、因此,可以确定,响应头:X-Frame-Options: SAMEORIGIN,主要的作用是让header.html仅能够在tv域名下展示,但是现在的需求却是需要在所有二级域名下均能够展示,设置响应头:X-Frame-Options: frame-ancestors http://mytv.eastobacco.dev ,如图10

# add_header X-Frame-Options SAMEORIGIN;

add_header X-Frame-Options “Allow-From http://mytv.eastobacco.dev”;

add_header X-Frame-Options “Allow-From http://tv.eastobacco.dev”;

e6db90fe0f641de9c7f767b462b8bd35.png

图10

11、重复第7步骤,发现header.html可以在mytv域名下展示,如图11

2ea7cfca6e339ba5d162a429e0f7be50.png

图11

12、重复第9步骤,发现header.html在tv域名下无法展示,不符合预期,如图12

5082332117d0b2392572e943eb8241f2.png

图12

13、重新设置响应头:X-Frame-Options: frame-ancestors http://*.eastobacco.dev ,如图13

add_header X-Frame-Options “Allow-From http://*.eastobacco.dev”;

972d1a42132868ee313723ee33320c18.png

图13

14、重复第7步骤,发现header.html在mytv域名下无法展示,如图14

352f3f76aadad5cee1c4513546a65e9f.png

图14

15、重新设置响应头:X-Frame-Options: frame-ancestors http://mytv.eastobacco.dev, http://tv.eastobacco.dev ,如图15

add_header X-Frame-Options “Allow-From http://mytv.eastobacco.dev, http://tv.eastobacco.dev”;

ee1429ce341f50bf3eb49dd23801c843.png

图15

16、重复第7步骤,发现header.html在mytv域名下无法展示,如图16

9b0fa9feecc60a36d6ffdd66ef5563cc.png

图16

17、重新设置响应头:X-Frame-Options: frame-ancestors http://mytv.eastobacco.dev; http://tv.eastobacco.dev ,如图17

add_header X-Frame-Options “Allow-From http://mytv.eastobacco.dev; http://tv.eastobacco.dev”;

85f5873f90018e343c9c504902f0c1b7.png

图17

18、重复第7步骤,发现header.html在mytv域名下无法展示,如图18

ef5d92a58eaf4cd9d7ce826832af6f21.png

图18

19、参考网址:https://blogs.msdn.microsoft.com/ieinternals/2010/03/30/combating-clickjacking-with-x-frame-options/ ,Allow-From 不支持通配符或多个来源的列表,如图19

40a31b9022b8a6da35a0d3f447fe9e37.png

图19

20、参考网址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy__by_cnvoid ,重新设置响应头:Content-Security-Policy: frame-ancestors http://*.eastobacco.dev ,如图20

add_header Content-Security-Policy “frame-ancestors http://*.eastobacco.dev”;

5684c4722af5125b80c5d57b05a2771b.png

图20

21、重复第7步骤,发现header.html可以在mytv域名下展示,符合预期,如图21

624160aef82d3e560df4093fed4e55ee.png

图21

22、重复第9步骤,发现header.html可以在tv域名下展示,符合预期,如图22

3e27e178e0c5841810aad5d6560c8217.png

图22

23、在另一个顶级域名中包含tv下的header.html,仍然可以成功包含,不符合预期,由于兼容模式不支持 Content-Security-Policy ,决定放弃兼容模式下的展示限制,允许所有域名包含tv下的header.html,如图23

450dc924daaece50fb0e0f5bd04c77f7.png

图23

24、开启极速模式,重复第7步骤,发现header.html可以在mytv域名下展示,符合预期,如图24

6243f012e0ffe5eeba386d17f45d9335.png

图24

25、开启极速模式,重复第9步骤,发现header.html可以在tv域名下展示,符合预期,如图25

5d7405f6e8d055cac10d3baaf81c4cea.png

图25

26、在另一个顶级域名中包含tv下的header.html,发现header.html无法展示,符合预期,如图26

708df71f880466efb8208ef346bbc30a.png

图26

27、重复第1步骤,正常显示,符合预期,如图27

570f21268bcf624382f9b53e8ca27da1.png

图27

28、兼容模式实则是IE浏览器,极速模式实则是Chrome浏览器,响应头仅设置Content-Security-Policy,则在IE浏览器下放弃了安全性设置,以保证在所有浏览器下,http://*.eastobacco.dev 皆可以包含tv下的header.html,其他顶级域名则不可包含。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值