Come risolvere la vulnerabilità di reindirizzamento aperto?

4

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.

    
posta user273084 28.03.2015 - 20:49
fonte

1 risposta

1

Vorrei andare con il secondo approccio ( HTTP_HOST è controllato dall'utente, ma non importa in questo caso). È il più facile da usare ed è praticamente impossibile rovinarlo.

Il primo e il terzo approccio sono più difficili da usare dal codice chiamante (non è un problema di sicurezza, ma è ancora cattivo), e possono anche essere erroneamente utilizzati dal codice chiamante (il terzo è molto più semplice del primo) :

if (something the attacker can trigger with GET params) {
    $_SESSION['redir2addr'] = $_GET['addr'];
    include("redir.php");
}

e (non si sa mai di chi estendere il codice ...):

if (something the attacker can trigger with GET params) {
    $_SESSION['anticsrf_token'] = 'something';
    $_GET['anticsrf_token'] = 'something';
    include("redir.php");
}
    
risposta data 28.03.2015 - 21:22
fonte

Leggi altre domande sui tag