«Внешняя безопасность» — ссылка наносит удар без согласования

Безопасность JavaScript

1. Ссылки

Партнерские ссылки ссылаются друг на друга, размещая ссылки на сайты друг друга на своих сайтах. Необходимо иметь возможность находить адрес веб-сайта и название веб-сайта в коде веб-страницы, а также отображать имя веб-сайта при просмотре веб-страницы, чтобы пользователи могли найти свой собственный веб-сайт из совместных веб-сайтов и достичь цели взаимного продвижения.

Обычно используются дружеские ссылки.aСсылка реализована и размещена внизу портала.

<a href="https://www.xxx.com/" target="_blank">xxx网站</a>

2. Где нож

Связь дружбы пронзает вас ножом, где этот нож? ножwindow.opener !

window.openerЧто тогда? Знакомство с примером.

Например, на странице от А доaСсылка открывает страницу B, на странице B вы можетеwindow.openerДоступ к объекту окна страницы A.

3. Как тыкать

Например, на странице Б:

  • воплощать в жизньwindow.opener.location.href='https://www.xxx.com/', открыть страницу, точно такую ​​же, как страница А на странице А, и побудить пользователя выполнить небезопасные операции, такие как ввод пароля;

  • воплощать в жизньwindow.opener.document.getElementsByTagName('body')[0].innerHTML= '捅你一刀没商量';Измените содержимое на странице А;

И так о вредоносных операциях, которые можно сделать через оконный объект.

В-четвертых, как предотвратить

Датьaтег плюсrel = "noopener",Например

<a href="https://www.xxx.com/" rel = "noopener" target="_blank">
	xxx网站
</a>

rel=noopenerПоддерживает chrome49 и opera36, но не поддерживает Firefox, поэтому его необходимо добавить для совместимости.rel=noreferrer.

<a href="https://www.xxx.com/" rel = "noopener noreferrer" target="_blank">
	xxx网站
</a>

5. Расширение

Что если вы используете js для открытия внешних ссылок?

function openUrl(url) {
  let open = window.open();
  open.opener = null;
  open.location= url;
}

Является ли браузер несовместимым с вышеуказанным подходом?

function openUrl(url) {
  let a = document.createElement('a');
  a.rel = 'noopener noreferrer';
  a.target = "_blank";
  a.href = url;
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}