OPEN REDIRECT

1. LE CONCEPT

Une redirection ouverte (Open Redirect) se produit quand une application accepte une URL en entrée (via GET ou POST) et redirige l'utilisateur vers celle-ci sans aucune validation.

Le code typique vulnérable en PHP :

$url = $_GET['url']; header("Location: " . $url); // <--- DANGER ! exit;

2. POURQUOI EST-CE DANGEREUX ?

A. Phishing (Hameçonnage)

C'est l'usage principal. L'attaquant envoie un lien qui semble légitime car il commence par le domaine de confiance :

https://banque-secure.com/login?redirect=http://site-hacker.com

La victime voit "banque-secure.com", a confiance, clique, et se retrouve redirigée vers une fausse page de login.

B. Contournement de filtres (Bypass)

Certains filtres anti-spam ou pare-feux autorisent les liens vers des domaines connus (Youtube, Google...). Utiliser un Open Redirect permet de masquer un lien malveillant derrière un domaine autorisé.

C. JavaScript Injection (XSS)

Si la redirection se fait via JavaScript (window.location = ...) et non via les headers HTTP, on peut parfois injecter :

javascript:alert(1)

3. COMMENT SE PROTÉGER ?

Ne faites JAMAIS confiance à l'entrée utilisateur pour une redirection.

Solution 1 : Liste Blanche (Allowlist)

$allowed = ['home.php', 'dashboard.php', 'profile.php']; if (in_array($_GET['url'], $allowed)) { header("Location: " . $_GET['url']); }

Solution 2 : Valider le domaine

Vérifiez que l'URL commence par votre propre domaine ou est un chemin relatif (commence par /).




RETOUR AU LAB