Ссылки на пункты назначения из разных источников небезопасны
Published on • Updated on
Устанавливая ссылку на страницу на другом сайте с помощью атрибута target="_blank"
, вы можете подвергнуть свой сайт проблемам с производительностью и безопасностью:
- Другая страница может выполняться в рамках того же процесса, что и ваша страница. Если на другой странице выполняется много JavaScript, производительность вашей страницы может снизиться.
- Другая страница может получить доступ к объекту
window
с помощью свойстваwindow.opener
. Это может позволить другой странице перенаправить вашу страницу на вредоносный URL.
Добавление rel="noopener"
или rel="noreferrer"
к ссылкам target="_blank"
позволяет избежать этих проблем.
Начиная с Chromium версии 88, якоря с target="_blank"
по умолчанию получают поведение noopener
. Явное указание rel="noopener"
помогает защитить пользователей устаревших браузеров, включая Edge Legacy и Internet Explorer.
Почему аудит пункта назначения из разных источников Lighthouse завершается неудачей
Lighthouse помечает небезопасные ссылки на пункты назначения из разных источников:
![Аудит Lighthouse, показывающий небезопасные ссылки на пункты назначения из разных источников](https://wd.imgix.net/image/tcFciHGuF3MxnTr1y5ue01OGLBn2/ztiQKS8eOfdzONC7bocp.png?auto=format)
Lighthouse использует следующий процесс для определения ссылок как небезопасных:
- Сбор всех тегов
<a>
, содержащих атрибутtarget="_blank"
без атрибутовrel="noopener"
илиrel="noreferrer"
. - Фильтрация всех ссылок с одинаковым хостом.
Поскольку Lighthouse отфильтровывает ссылки с одним и тем же хостом, есть крайний случай, на который следует обратить внимание при работе с большим сайтом: если одна страница содержит ссылку с target="_blank"
на другую страницу вашего сайта без использования rel="noopener"
, последствия этого аудита для производительности по-прежнему остаются в силе. Однако вы не увидите эти ссылки в результатах поиска Lighthouse.
Each Best Practices audit is weighted equally in the Lighthouse Best Practices Score. Learn more in The Best Practices score.
Как повысить производительность вашего сайта и предотвратить уязвимости системы безопасности
Добавьте rel="noopener"
или rel="noreferrer"
к каждой ссылке, указанной в вашем отчете Lighthouse. В общем, при использовании target="_blank"
всегда добавляйте rel="noopener"
или rel="noreferrer"
:
<a href="https://examplepetstore.com" target="_blank" rel="noopener">
Example Pet Store
</a>
rel="noopener"
предотвращает доступ новой страницы к свойствуwindow.opener
и обеспечивает ее запуск в отдельном процессе.rel="noreferrer"
имеет тот же эффект, но также предотвращает перенаправление заголовкаReferer
на новую страницу. См. Тип ссылки "noreferrer".
Дополнительную информацию см. в публикации «Безопасный общий доступ к ресурсам из разных источников».
Ресурсы
Updated on • Improve article