安全开发小知识记录
[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句柄与此同时通过这个句柄,子窗口可以访问到父窗口的一些属性;虽然很有限,但是我们却可以修改父窗口的页面地址,让父窗口显示指定的页面。
实例演示:
#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演示:
#窗口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网站无效)。
<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.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ngx_lua_waf针对性改写
- Wordpress < 4.1.2 存储型XSS分析与稳定POC
- 重构Sec-News之路
- ThinkPHP留后门技巧
- 『三个白帽』某题的writeup
- 创造tips的秘籍——PHP回调后门
- Joomla远程代码执行漏洞分析(总结)
- 那些年我拿下的demo站之方维O2O
- emlog自动备份插件泄露整站数据库备份漏洞
- md5(unix)原理分析
- XDCTF2015代码审计全解
- 使用腾讯云TCB云函数抓取微信情报信息
- 数据库PostrageSQL-服务器配置预写式日志
- 分享一个jsonp劫持造成的新浪某社区CSRF蠕虫
- 数据库PostrageSQL-服务器配置资源消耗