Jump to content

Raccourcir processus récupération mot de passe


Recommended Posts

Bonjour à tous,

 

Un client me demande de raccourcir le fastidieux processus de changement de mot de passe. J'ai beau lui dire que prestashop est fait comme ça, il ne veut rien entendre.

Est-ce possible de faire en sorte que lorsqu'un utilisateur va sur Mot de passe oublié, il renseigne son mail et il reçoit dès le premier mail son nouveau mot de passe? (c'est à dire suppression de l'étape avec le premier mail et le lien de type mot-de-passe-oublie?token=e999417c4fe4a5e4feb2a0f75b6037b8&id_customer=726  mais de mettre cette action sur le premier bouton "recuperer")

Si oui, comment dois-je m'y prendre?

Sinon pouvez vous m'expliquer concrétement ce qui empêche de faire cela pour m'aider à la convaincre de laisser tomber avec cette histoire de mot de passe :)

 

Merci d'avance.

Link to comment
Share on other sites

J'ai réussi en mettant mon fichier password.php sous cette forme :

 
public function postProcess(){

if (Tools::isSubmit('email'))
{


if (!($email = trim(Tools::getValue('email'))) || !Validate::isEmail($email))
$this->errors[] = Tools::displayError('Invalid email address.');
if ($email)
{
$customer = new Customer();
$customer->getByemail($email);
if (!Validate::isLoadedObject($customer))
$this->errors[] = Tools::displayError('Customer account not found');
elseif (!$customer->active)
$this->errors[] = Tools::displayError('You cannot regenerate the password for this account.');


elseif ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0)
$this->errors[] = sprintf(Tools::displayError('You can regenerate your password only every %d minute(s)'), (int)$min_time);


else
{
$customer->passwd = Tools::encrypt($password = Tools::passwdGen(MIN_PASSWD_LENGTH));
$customer->last_passwd_gen = date('Y-m-d H:i:s', time());
if ($customer->update())
{
Hook::exec('actionPasswordRenew', array('customer' => $customer, 'password' => $password));
$mail_params = array(
'{email}' => $customer->email,
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{passwd}' => $password
);
if (Mail::Send($this->context->language->id, 'password', Mail::l('Your new password'), $mail_params, $customer->email, $customer->firstname.' '.$customer->lastname))
$this->context->smarty->assign(array('confirmation' => 1, 'email' => $customer->email));
else
$this->errors[] = Tools::displayError('An error occurred while sending the email.');
}
else
$this->errors[] = Tools::displayError('An error occurred with your account, which prevents us from sending you a new password. Please report your this issue using the contact form.');
}
}
else
$this->errors[] = Tools::displayError('We cannot regenerate your password with the data you\'ve submitted.');
}
/* elseif (Tools::isSubmit('email'))
{
if (!($email = trim(Tools::getValue('email'))) || !Validate::isEmail($email))
$this->errors[] = Tools::displayError('Invalid email address.');
else
{
$customer = new Customer();
$customer->getByemail($email);
if (!Validate::isLoadedObject($customer))
$this->errors[] = Tools::displayError('There is no account registered for this email address.');
elseif (!$customer->active)
$this->errors[] = Tools::displayError('You cannot regenerate the password for this account.');
elseif ((strtotime($customer->last_passwd_gen.'+'.(int)($min_time = Configuration::get('PS_PASSWD_TIME_FRONT')).' minutes') - time()) > 0)
$this->errors[] = sprintf(Tools::displayError('You can regenerate your password only every %d minute(s)'), (int)$min_time);
else
{
$mail_params = array(
'{email}' => $customer->email,
'{lastname}' => $customer->lastname,
'{firstname}' => $customer->firstname,
'{url}' => $this->context->link->getPageLink('password', true, null, 'token='.$customer->secure_key.'&id_customer='.(int)$customer->id)
);
if (Mail::Send($this->context->language->id, 'password_query', Mail::l('Password query confirmation'), $mail_params, $customer->email, $customer->firstname.' '.$customer->lastname))
$this->context->smarty->assign(array('confirmation' => 2, 'email' => $customer->email));
else
$this->errors[] = Tools::displayError('An error occurred while sending the email.');
}
}
}*/
elseif (Tools::getValue('token') || Tools::getValue('id_customer'))
$this->errors[] = Tools::displayError('We cannot regenerate your password with the data you\'ve submitted.');
}

Désormais l'utilisateur qui demande à récupérer reçoit immédiatement un nouveau mot de passe.

Qu'en pensez vous? Quels sont les risques en terme de sécurité?

Link to comment
Share on other sites

Bonjour à tous,

 

Un client me demande de raccourcir le fastidieux processus de changement de mot de passe. J'ai beau lui dire que prestashop est fait comme ça, il ne veut rien entendre.

Est-ce possible de faire en sorte que lorsqu'un utilisateur va sur Mot de passe oublié, il renseigne son mail et il reçoit dès le premier mail son nouveau mot de passe? (c'est à dire suppression de l'étape avec le premier mail et le lien de type mot-de-passe-oublie?token=e999417c4fe4a5e4feb2a0f75b6037b8&id_customer=726  mais de mettre cette action sur le premier bouton "recuperer")

Si oui, comment dois-je m'y prendre?

Sinon pouvez vous m'expliquer concrétement ce qui empêche de faire cela pour m'aider à la convaincre de laisser tomber avec cette histoire de mot de passe :)

 

Merci d'avance.

 

Bonjour,

 

Tout bêtement la chose suivante, le type de boutique est-elle du B to B, sur un secteur concurrentiel ?

 

Si oui (ou non d'ailleurs, mais oui appuierait plus), n'importe quel utilisateur un peu malin qui veut pourrir son concurent ou voisin n'aura qu'à entrer son adresse mail en boucle toutes les heures pour changer le mot de passe automatiquement et spammer la boite mail.

 

En augmentant la valeur de régénération de mot de passe, certains vont revenir en disant : Oui mais on ne peut pas régénérer deux fois par semaine. En diminuant cette valeur, on pourra lancer le petit, même tout les 3 jours, c'est suffisant pour être dérangeant (imaginez que votre mot passe soit régénéré tous les 3 jours).

 

La méthode utilisée par Prestashop est une des plus rentable sur le rapport temps/sécurité (sans compter qu'elle est relativement standard un peu partout). A noter que comme le mot de passe est hashé, il n'est pas possible de le récupérer (seulement de le régénérer).

 

Je dis ça parceque j'ai déjà eu ce type de demande, deux mois après le client revenait sur sa décision après avoir reçu plusieurs plaintes :P

Link to comment
Share on other sites

Hello!

 

Je l'ai informé de ça mais bon il ne veut rien savoir >> son pb. (je le vois bien faire comme votre client et revenir sur sa décision! :))

Après c'est du BtoC et avec des produits qui ne se trouvent pas des masses sur le web à part sur des sites spécialisés pour chacun des produits qu'il vend, donc le risque de se faire emmerder par un concurrent est minime selon moi.

Le truc que je craignais le plus, n'étant pas franchement un expert en sécurité, c'était de modifier ce process et de supprimer la notion de token dont je dois avouer ne pas bien comprendre le principe! Si vous me dites que le risque de se faire hacker des comptes clients n'est pas plus grand comme ça, ça me va, c'est tout ce que je voulais entendre. Le risque de se faire spammer/réinitialiser son mdp par un tiers il en est conscient.

(Et pour info la régénération est fixée à 360mn!! Même ca il ne veut peut l'augmenter!)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...