# wp_targeted_link_rel : sécuriser un lien externe sans y penser à chaque article

> Chaque lien ouvert dans un nouvel onglet mérite un attribut rel de sécurité. Un filtre natif l'ajoute automatiquement, sans y repenser à chaque rédaction.

- Auteur : WordPress Développement
- Publié le : 2024-05-22
- Mis à jour le : 2024-05-22
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/wp-targeted-link-rel-securiser-lien-externe/

## L’essentiel

- Un lien avec target vers un nouvel onglet garde un accès partiel à la page d'origine
- Le filtre wp_targeted_link_rel ajoute noopener et noreferrer automatiquement
- Il s'applique au contenu affiché, sans modifier le texte enregistré en base

Pourquoi certains liens ouverts dans un nouvel onglet exposent-ils la page d'origine à une manipulation via `window.opener`, même quand aucun script suspect n'est visible dans le code source ? La réponse tient à un attribut HTML souvent oublié au moment de la rédaction d'un lien : `rel="noopener noreferrer"`.

Un lien classique avec `target="_blank"` donne, par défaut, à la page ouverte dans le nouvel onglet un accès partiel à l'objet `window` de la page d'origine via la propriété `window.opener`. Une page malveillante peut exploiter cet accès pour rediriger discrètement l'onglet d'origine vers une page de phishing, pendant que le visiteur reste concentré sur le nouvel onglet ouvert.

## Ce que WordPress corrige automatiquement

Depuis la version 5.1, WordPress ajoute automatiquement `rel="noopener"` à tout lien du contenu qui comporte un attribut `target`, via le filtre `the_content` et sa dépendance interne à la fonction `wp_targeted_link_rel()`. Ce correctif s'applique au moment de l'affichage du contenu, sans jamais modifier le texte réellement enregistré en base de données.

```
// Enregistré en base :
<a href="https://exemple-externe.com" target="_blank">Voir le site</a>

// Affiché après le filtre the_content :
<a href="https://exemple-externe.com" target="_blank" rel="noopener">Voir le site</a>
```

Ce comportement fonctionne de façon transparente pour la grande majorité des sites, sans qu'aucune configuration ne soit nécessaire de la part du développeur ou du rédacteur.

## Étendre le comportement avec le filtre dédié

> L'essentiel à retenir : Un lien avec target vers un nouvel onglet garde un accès partiel à la page d'origine ; Le filtre wp_targeted_link_rel ajoute noopener et noreferrer automatiquement ; Il s'applique au contenu affiché, sans modifier le texte enregistré en base

Le filtre `wp_targeted_link_rel` permet d'ajuster la valeur ajoutée par défaut, par exemple pour y inclure également `noreferrer`, qui empêche en plus l'envoi de l'en-tête `Referer` vers le site cible :

```
add_filter( 'wp_targeted_link_rel', function ( $rel ) {
    return trim( $rel . ' noreferrer' );
} );
```

WordPress n'ajoute pas `noreferrer` par défaut, uniquement `noopener`, car `noreferrer` supprime aussi certaines informations utiles à des fins d'analyse de trafic légitime sur le site de destination. Le choix d'ajouter ou non cette valeur supplémentaire reste donc un arbitrage propre à chaque projet, entre confidentialité renforcée et statistiques de provenance conservées côté site cible.

## Un second filtre pour cibler quels liens sont concernés

Un filtre complémentaire, `wp_targeted_link_rel_priority`, ajuste uniquement la priorité d'exécution du filtre principal, utile si un thème ou une extension doit intervenir avant ou après ce traitement automatique dans l'ordre des filtres accrochés à `the_content`. Pour restreindre plus finement quels liens sont concernés, il faut passer par une logique personnalisée à l'intérieur du filtre `wp_targeted_link_rel` lui-même, en inspectant le contexte transmis en second argument :

```
add_filter( 'wp_targeted_link_rel', function ( $rel, $link ) {
    if ( str_contains( $link, 'partenaire-de-confiance.example' ) ) {
        return 'noopener';
    }

    return trim( $rel . ' noreferrer' );
}, 10, 2 );
```

## Le cas des liens ajoutés hors du contenu éditorial

- Un lien inséré directement dans un gabarit de thème, en dehors de `the_content`, n'est pas concerné par ce filtre automatique.
- Un lien généré dynamiquement par une extension, via une fonction qui n'applique pas `the_content`, doit recevoir l'attribut `rel` manuellement.
- Les widgets et les blocs affichés en dehors du corps principal de l'article suivent des filtres distincts, à vérifier au cas par cas selon leur implémentation.

Pour ces cas hors du champ d'application du filtre automatique, la vigilance reste manuelle : ajouter directement `rel="noopener noreferrer"` dans le code du gabarit ou de l'extension concernée.

## Vérifier que le correctif s'applique bien

Un simple affichage du code source de la page rendue permet de confirmer la présence de l'attribut sur les liens du contenu principal. Sur un thème qui désactive ou modifie fortement le filtre `the_content` par défaut, ce correctif automatique peut disparaître sans que cela saute immédiatement aux yeux, d'où l'intérêt de vérifier concrètement plutôt que de supposer sa présence.

> Sur un site qui autorise les rédacteurs à insérer librement des liens externes, s'appuyer sur ce filtre natif plutôt que de compter sur la rigueur de chacun reste la solution la plus robuste sur la durée.

## En résumé

Ce correctif de sécurité, actif par défaut depuis plusieurs années dans WordPress, reste largement méconnu simplement parce qu'il fonctionne silencieusement, sans jamais réclamer d'intervention. Le connaître permet surtout de savoir où intervenir quand un cas particulier — thème personnalisé, contenu généré hors de `the_content` — nécessite un ajustement manuel du même principe.
