Joomla.it Forum
Non solo Joomla... => Sviluppo => : ilnavigatore 14 Apr 2016, 22:19:06
-
Ciao a tutti,
Sto creando un piccolo componente per gestire la verifica dell'email per gli utenti che inseriscono un annuncio nel mio sito.
Vorrei utilizzare all'incirca lo stesso sistema che viene utilizzato da sistema per la validazione dell'utente.
Quindi creazione del token ed invio tramite email.
Quello che non mi è chiaro è come venga pescato il token, ho sbirciato in giro in com_user\controller.php e nel models\registrations.php e non c'è un getVar($token)...
Sono curioso di sapere come viene gestita la cosa?
Scusate se faccio domande stupide, ma mi piace capire le cose fino in fondo.
Grazie
-
Onestamente non lo so nemmeno io ma guarderò, ma cosa ne pensi di generare un md5 sulla data-orario, menorizzi sul db e invii per email e poi fai un confronto..
-
Ciao oncelot, si alla fine si tratta di fare quello però vorrei capire come fare il get del token in maniera abbastanza sicura. E poi sono curioso di sapere come funziona.
-
Il token è una sicurezza per evitare request forgery quindi necessita di essere non prevedibile.
Data e ora oltre a essere prevedibile non è univoco. Lo sarebbe usando microtime ma saresti costretto a mettere in cache il token perchè non più riproducibile (un attimo dopo cambierebbe l'hash).
Per sapere da dove viene basta un ide di sviluppo.
In Joomla 3.5 credo venga usata una libreria hash di terze parti
-
Per generarlo seguendo la prassi di joomla puoi seguire queste indicazioni: https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms
Se vuoi sapere come viene realmente implementato segui il consiglio di MariaElenaBoschi di utilizzare una buona IDE che ti riporta alla definizione del metodo che lo genere (scoprirai che è nel file libraries/joomla/session/session.php)
/**
* Create a token-string
*
* @param integer $length Length of string
*
* @return string Generated token
*
* @since 11.1
*/
protected function _createToken ($length = 32)
{
static $chars = '0123456789abcdef';
$max = strlen($chars) - 1;
$token = '';
$name = session_name();
for ($i = 0; $i < $length; ++$i)
{
$token .= $chars[(rand(0, $max))];
}
return md5($token . $name);
}
-
Ciao e grazie per le risposte!!
Come generarlo sono riuscito a capirlo, è come "pescarlo" dal link che invio tramite email che non mi è chiaro. Perche dovrei richiamare un task del mio componente, pescare il token e confrontarlo per confermare la verifica dell'email. Potrei anche fare un semplice getVar ma ne risentirebbe la sicurezza.
-
Ciao giovi,
grazie mille il documento che hai inserito mi da tutte le risposte!!
Grazie ancora