Una redirección abierta significa que el valor de la redirección se puede determinar sobre la marcha.
Lo que se recomienda es tener solo una lista permitida predefinida. Tiene un mecanismo para permitir que un usuario autorizado ingrese la URL o tal vez esta es una función automática de un CMS o aplicación web que busca enlaces salientes y luego crea la entrada. Usted determina qué criterios se requieren para que una persona o un proceso automatizado "agreguen" un enlace, también puede filtrar o poner una lista negra en el momento en que esto sucede.
En el lado del servidor, tendría una base de datos. Usted agregaría a la base de datos al menos una identificación y la URL real. Puede decidir hacer algo más que solo números de identificación en orden, tal vez usar alguna función para crear números semi-aleatorios para evitar la enumeración simplemente incrementando el valor de identificación. Algo como
| id | real_url | shortcode |
--------------------------------
| 1 | example.com | X3DFE |
| 2 | example.net | G4TG |
Luego puede tener una URL como: example.com/out?shortcode=X3DFE
, procesa esto en el lado del servidor y luego emite un redireccionamiento a real_url
si el código corto no está en la tabla de búsqueda, proporciona un mensaje de error que dice que no es válido.
Entonces, en el lado del servidor, algo como:
$shortcode = filter_function($_GET['shortcode']);
$url = sql_select_function("SELECT 'real_url' FROM url_table WHERE shortcode ='" . $shortcode . "');
header("HTTP/1.1 301 Moved Permanently");
header("Location: " . $url . "");
Los detalles dependerán, obviamente, de su idioma y otras tareas que desee realizar.
Su base de datos también puede incluir otra información, puede requerir moderación para los enlaces enviados por el usuario o puede incluir al usuario que creó los enlaces. También puedes grabar el número de visitas, etc.
El concepto clave es que utiliza algún mecanismo para predeterminar la lista y asegurarse de que la decisión de redireccionamiento se tome en el lado del servidor. La idea es crear una lista blanca de permitir redirecciones.
Recomendaría ver cómo algunos acortadores de URL funcionan como su concepto similar y pueden proporcionar algún código útil en su idioma de destino.