Erreur de transmission de données avec la dernière version du navigateur Chrome

Depuis le déploiement de la version 87 du navigateur Chrome et du renforcement de la politique de sécurité de celui-ci, les versions 1.7 de PrestaShop affichent un message d'erreur lors de la création de compte client.

Les informations que vous êtes sur le point de soumettre ne sont pas sécurisées

Google Chrome étant le navigateur le plus utilisé dans le monde et cette erreur risquant vous faire perdre de nombreuses ventes, il est indispensable de corriger rapidement ce bug dans PrestaShop.

L'avantage d'un produit Open-source comme PrestaShop c'est la force de sa communauté ainsi après l'identification du souci le week-end dernier, celle-ci a su apporter une solution technique viable en moins de 24h.

Contexte

La dernière mise à jour du navigateur Google Chrome, la version 87, semble renforcer la sécurité mais peut-être de manière trop forte.

Ainsi, lors de la validation du formulaire d'inscription sur les versions 1.7 de PrestaShop, une redirection est faite vers la page d'accueil qui, étrangement, est toujours effectuée hors du contexte SSL configuré par la boutique ce qui amène le navigateur à croire que les données du formulaire sont transmises à une page non sécurisée alors que ceci n'est qu'une redirection après l'enregistrement du nouveau compte client.

Solution rapide et simple

Pour corriger rapidement ce problème, il vous suffit d'ouvrir le fichier classes/Tools.php de votre installation PrestaShop

de trouver la ligne suivante (vers la ligne 200) : $use_ssl = !empty($url);

et de la remplacer par : $use_ssl = Configuration::get('PS_SSL_ENABLED');

Si vous souhaitez que j'intervienne à votre place pour effectuer cette correction n'hésitez pas à me commander un ticket d'intervention.

Solution complète

En analysant ce code, on constate que celui-ci ne s'appliquera que si la fonction redirect() est appelée.

Pour éviter que ce bug ne se reproduise si on utilise une autre fonction que celle présente dans la classe Tools, vous pouvez mettre en application la proposition de Doekia.

Cela se passe maintenant dans le fichier classes/Link.php.

Cherchez la fonction getBaseLink() et remplacez la par :

public function getBaseLink($id_shop = null, $ssl = null, $relative_protocol = false)
{   
    static $force_ssl = null;
    
    is_null($force_ssl) && ($force_ssl = (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE')));

    $force_ssl && ($ssl = $force_ssl);

    if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null) {
        $shop = new Shop($id_shop);
    } else {
        $shop = Context::getContext()->shop;
    }

    if ($relative_protocol) {
        $base = '//'.($ssl && $this->ssl_enable ? $shop->domain_ssl : $shop->domain);
    } else {
        $base = (($ssl && $this->ssl_enable) ? 'https://'.$shop->domain_ssl : 'http://'.$shop->domain);
    }

    return $base.$shop->getBaseURI();
}

Conclusion

L'affichage de cette erreur n'est actuellement visible que sur les versions 1.7 de PrestaShop mais en réalité elle peut se reproduire sur n'importe quelle version même sur une 1.5 ou une 1.4.

Si aucun signalement ne fut fait plus tôt c'ets parce que Google Chrome n'avait pas renforcé ses contrôles et donc aucune chance d'identifier cette erreur sur les anciennes versions de PrestaShop, mais il ne serait tarder que certains comportement provoque le même souci et donc demandera la même correction.

Alors n'hésitez pas si vous ne sentez pas l'âme d'un développeur à bidouiller des lignes de code dans votre boutique PrestaShop et commandez moi un ticket d'intervention que je corrige ce bug rapidement pour ne pas perdre trop de ventes en cette période de noël.

Solution rapide et simple ... bis

Une solution est proposée officiellement sur le dépôt gitHub de PrestaShop : https://github.com/PrestaShop/PrestaShop/pull/22432

Je ne sais pas si c'ets la meilleure solution pour corriger le problème, mais pour moi il soulève un autre souci avec cette version 1.7 qui accumule les bugs à chaque version et qui semble trainer des bouts de code cumulatifs qui ne furent jamais repris.

Peut on espérer que les montées en version de PHP vont corriger certains éléments et que lorsque la 1.7 sera stabilisée un ménage dans le code pourra se préciser avant de basculer sur le développement de la version 8.0 ?

Discussions