前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安全开发小知识记录

安全开发小知识记录

作者头像
全栈工程师修炼指南
发布2020-10-23 16:51:09
6830
发布2020-10-23 16:51:09
举报
文章被收录于专栏:全栈工程师修炼之路

[TOC]

0x00 前言

小小知识大作用

0x01 F&Q
1.前端Web

Q:a标签target="_blank"的安全问题及解决办法 答:A标签的target属性规定在何处如何打开链接文档常用的有_self & _blank,如果在一个 A 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口中的文档,如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个窗口一个指定的标记,然后超链接文档就可以指向这个新的窗口。您可以把target=”_blank”理解为新的浏览器窗口打开此超链接;

关键点: 如果您使用了该属性却没有添加rel=”noopener noreferrer”得话就会存在一定得安全风险;

原理解析:我们知道JS在在调用window下的open方法创建一个新窗口的同时,我们可以获得一个创建窗口的opener句柄,如果通过target=”_blank”点开的窗口活着标签页,此时子窗口也能捕获opener句柄与此同时通过这个句柄,子窗口可以访问到父窗口的一些属性;虽然很有限,但是我们却可以修改父窗口的页面地址,让父窗口显示指定的页面。

实例演示:

代码语言:javascript
复制
#http://www.weiyigeek/a.html
<a href="b.html" target="_blank">跳转</a>;

#点击后浏览器会在新得窗口和标签页打开b.html,又假如此时b.html有如下js代码
if (window.opener) {
    window.opener.location.href = 'eval.html';
}

当页面b.html被打开的同时原来打开a.html的标签页会被重定向到eval.html, eval.html可以是和原来域完全不相关的其它域的资源这就是问题得风险点,如果网站上有上传功能得就需要值得注意了。

JS-Console演示:

代码语言:javascript
复制
#窗口1.default.html
window.open("./index.html")
#Restricted about:blank

#窗口2.index.html
window.opener
#Restricted https://weiyigeek.top/default.html

#此时由于target属性为_blank且没有限制Window.opener访问行为执行以下语句此时窗口1将会加载下面得网站文档内容;
window.opener.location.href = 'https://blog.weiyigeek.top';

解决方法:我们唯一的目的就是限制window.opener的访问行为,此时我只需要在标签中加上一个rel="noopener"属性(chrome)或者rel="noreferrer"属性(火狐),当然您可以将两个属性值合并写成rel="noopener noreferrer"来完整覆盖,此时子页面就再也访问不到父页面的句柄所以更无法操作原窗口的句柄; 也可以通过js来控制限制句柄的访问: var otherWindow = window.open(); otherWindow.opener = null; otherWindow.location = url;

总结:在开发中一些小细节还是要引起注意别怕麻烦,比如我们以后在写a标签的时候尽量都在target=”_blank”后面添加一句rel="noopener noreferrer"

Q:”no-referrer”属性标签解决防盗链问题办法 答:该标签属性解决其他网站防盗链图片得设置方法,可对绝大部分网站适应,但是会造成百度统计数据异常,请谨慎使用(已测试部分gif网站无效)。

代码语言:javascript
复制
<meta name="referrer" content="no-referrer" />

<!-- #标签内使用no-referrer -->
<a href="http://example.com" referrer="no-referrer|origin|unsafe-url">xxx</a>
<img referrer="no-referrer|origin|unsafe-url" src="{{item.src}}"/>
<image referrer="no-referrer|origin|unsafe-url" src="{{item.src}}"></image>
WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 F&Q
    • 1.前端Web
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档