In redir.php:
header("Location: {$_GET['addr']}");
Per la correzione della vulnerabilità di reindirizzamento aperta posso pensare a diversi modi:
1- (Effetto collaterale di) Utilizzo di un token di sicurezza (token anti-csrf):
if(!isset($_SESSION['anticsrf_token'], $_GET['anticsrf_token']) or $_SESSION['anticsrf_token']!==$_GET['anticsrf_token']) exit('...');
Questo dovrebbe funzionare perché un utente malintenzionato non può sapere e non può creare un token anti-csrf valido.
2- Confrontare il dominio del "redirect to address" con quello dello script (redir.php) stesso ($ _SERVER ['HTTP_HOST']).
3- Il 'redirect to address' può essere prima memorizzato dallo script di riferimento (lo script che contiene il collegamento a redir.php) in $ _SESSION e quindi redir.php agisce solo su quella sessione var:
header("Location: {$_SESSION['redir2addr']}");
Un cookie può essere usato al posto della sessione.
Posso pensare anche ad altri modi, ma sembra che uno di questi sia sufficiente per la mia app. Apprezzerò qualsiasi idea e ti farò sapere o posso pensare.