风险性
- 新页面可以通过window.opener获取源页面的window对象,跨域也可以获取到部分属性。
钓鱼危害:开发者可以通过修改新页面的window.opener.location值,修改源页面的的url
- 子页面和父页面共用一个进程
解决办法
使子页面获取window.opener = null;
- a标签
<a href="" target="_blank" rel="noopener"></a> // 设置rel="noopener"
<a href="" target="_blank" rel="noreferrer"> </a> // 设置rel="noreferrer"
- window.open()
const newPage = window.open();
newPage.opener = null;
newPage.location = '';
newPage.target = '_blank';