it-swarm.dev

Implementa l'anti-spoofing CSRF usando Joomla Framework

Ho usato i metodi descritti in questa pagina in Joomla molte volte prima:

http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms

Ora voglio implementare lo stesso meccanismo usando Joomla Framework e Framework App . Quindi ho provato questo:

$token = $this->app->getFormToken();

Ma ciò provoca la chiusura dell'applicazione. Ho esaminato il codice e il problema inizia nella funzione getFormToken qui:

return md5($this->get('secret') . $userId . $this->session->getToken($forceNew));

$ this-> get ('secret') ritorna qui perché non c'è un punto in 'secret':

if (!strpos($path, '.'))
{
    return (isset($this->data->$path) && $this->data->$path !== null && $this->data->$path !== '') ? $this->data->$path : $default;
}

Quindi questa funzione viene eseguita da Symfony:

public function write($sessionId, $data)
{
    return (bool) $this->handler->write($sessionId, $data);
}

E infine questa funzione viene eseguita:

public function close()
{
    $this->active = false;

    return (bool) $this->handler->close();
}

Che esce dall'applicazione.

Che cosa sto facendo di sbagliato? Devo aggiungere un "segreto" da qualche parte? Come devo generare un token di modulo che controllo quindi quando viene inviato il modulo?

6
Joe P

Alla fine l'ho capito. Avevo bisogno di creare una sessione e assegnarla all'app prima che getFormToken funzionasse. Quindi prima uso la sessione di Joomla:

use Joomla\Session\Session;

Quindi creare la sessione, impostarla e ottenere il token del modulo:

$session = Session::getInstance('none');
$this->app->setSession($session);
$token = $this->app->getFormToken();

Facile quando sai come! Spero che questo aiuti qualcun'altro.

4
Joe P