Código Correcto
La manera correcta y segura de realizar redirecciones HTTP es no permitir que el usuario controle directamente la URL destino mediante parámetros no validados.
$target = "";
if (array_key_exists("redirect", $_GET) && is_numeric($_GET['redirect'])) {
switch (intval($_GET['redirect'])) {
case 1:
$target = "info.php?id=1";
break;
case 2:
$target = "info.php?id=2";
break;
case 99:
$target = "https://digi.ninja";
break;
}
if ($target != "") {
header("Location: " . $target);
exit;
} else {
?>
Unknown redirect target.
<?php
exit;
}
}
?>
Missing redirect target.
En lugar de confiar directamente en la entrada del usuario, el código implementa una lista fija (whitelist) de destinos permitidos. Esto se logra usando una estructura de control (switch) que limita los valores válidos del parámetro redirect a valores específicos, conocidos y previamente definidos:
Si el parámetro recibido coincide con alguna de las opciones válidas (por ejemplo 1, 2, o 99), se asigna una URL objetivo predefinida. En caso contrario, no se produce ninguna redirección y se muestra un mensaje de error explícito (Unknown redirect target o Missing redirect target). Gracias a este mecanismo, incluso si el usuario manipula el parámetro redirect intentando redirigir a un destino no autorizado, el sistema ignorará la entrada inválida, impidiendo cualquier intento malicioso de redirección abierta.
Esta técnica de validación estricta (whitelisting) es una práctica de seguridad altamente recomendada para mitigar ataques de tipo Open HTTP Redirect.