Исходящие ссылки

Что это?

Исходящие ссылки с target="_blank" без атрибута rel="noopener" создают уязвимость безопасности. Когда пользователь кликает на такую ссылку, открытая страница получает доступ к исходной вкладке через JavaScript. Это как оставить ключи от своей квартиры незнакомцу.

Почему это критически опасно?

Техническая суть проблемы

<!-- ОПАСНО -->
<a href="https://externalsite.com" target="_blank">Внешняя ссылка</a>

<!-- БЕЗОПАСНО -->
<a href="https://externalsite.com" target="_blank" rel="noopener">Внешняя ссылка</a>

Когда новая вкладка получает доступ:

// На странице externalsite.com злоумышленник может выполнить:
window.opener.location = 'https://fake-site.com/phishing';

Быстрая проверка за 2 минуты

  1. Аудит текущих ссылок:
    • Откройте исходный код (Ctrl+U)
    • Найдите через поиск target="_blank"
    • Проверьте наличие rel="noopener" или rel="noreferrer"
  2. Инструменты автоматизации:
    • Google Search Console → Безопасность
    • Lighthouse audit → Best Practices
    • Screaming Frog → Custom Search

План исправления за 10 минут

  1. Добавьте защитные атрибуты:
    <!-- МИНИМУМ -->
    <a href="https://externalsite.com" target="_blank" rel="noopener">Внешняя ссылка</a>
    
    <!-- РЕКОМЕНДУЕТСЯ -->
    <a href="https://externalsite.com" target="_blank" rel="noopener noreferrer">Внешняя ссылка</a>
  2. Массовое исправление в CMS (WordPress):
    function add_noopener_to_external_links($content) {
        $content = preg_replace('/<a(.*?)target="_blank"(.*?)>/', '<a$1target="_blank" rel="noopener$2>', $content);
        return $content;
    }
    add_filter('the_content', 'add_noopener_to_external_links');
  3. Для статических сайтов:
    • Глобальный поиск и замена в коде
    • Используйте Prettier или ESLint с правилом "react/jsx-no-target-blank"

Разница между атрибутами

Частые ошибки

Проверка результата

Реальный пример последствий

До исправления: пользователь кликает на ссылку → открывается фишинговый сайт → исходная страница подменяется → кража данных.

После исправления: пользователь кликает на ссылку → безопасное открытие в новой вкладке → исходная страница защищена.

Итог

Атрибут rel="noopener" — обязательный стандарт безопасности для всех внешних ссылок. Потратьте 10 минут на исправление — и защитите своих пользователей от серьезных угроз. Безопасность всегда должна быть приоритетом!