Information importante : Faille de sécurité Prestashop

Nous avons découvert que des milliers sites Prestashop étaient vulnérables à une faille de sécurité. Nous vous conseillons de vérifier si votre site est impacté.

Pré-requis

  • Prestashop 1.4.17 (stable) ou supérieur
  • La réécriture d’URL activée
  • PHP 5.3.x (ou inférieur si patchée)
  • Des connaissances en XML, HTTP, REST, …

Patcher Prestashop pour PHP 5.2 et antérieur

A sa sortie, cette fonctionnalité a connue quelques bugs.
Si vous utilisez Prestashop 1.4.0.17 sur un serveur équipé de PHP 5.2 ou antérieur, vous risquez donc de rencontrer le bug PSCFI-1187 que nous avons signalé à l’équipe de Prestashop.
Si c’est le cas, pas de panique, nous avons le patch qui va avec.

  1. Ouvrez le fichier « webservice/dispatcher.php »
  2. Allez à la ligne 67
  3. Remplacez le code suivant :

Par :

Cette solution permet de ne plus utiliser le Late Static Bindings qui est disponible uniquement sur PHP 5.3

Configuration et activation du webserivce

Réécriture d’URL

Les ressources d’un service web sont identifiées grâce à l’URL utilisée. Avant d’autoriser la publication de webservices, vous devez donc préalablement activer la réécriture d’URL (URL Rewriting).

Activation des webservices

Les webservices de Prestashop permettent à une autre système autorisé, d’avoir accès aux informations de votre site e-commerce en lecture et/ou en écriture. Par défaut, cette fonctionnalité est désactivée. Vous devez donc l’activer pour pouvoir les utiliser.



activation-webservice-prestashop

Création d’un compte d’accès (génération d’une clé)

Une fois activé, le webservice reste fermé à l’ensemble des utilisateurs.
Vous devez créer un compte d’accès au webservice en générant une clé unique.


cle-webserviceConfiguration des droits (permissions)

Vous devez ensuite ajouter des droits pour chaque entité de votre boutique.
Nous allons donc faire un compte ayant accès aux produits et aux tags en lecture uniquement (pas de modification possible) :
permissions-webservice

Cliquez sur Enregistrer

En retournant sur la page webservice, nous pouvons maintenant voir que notre clé est bien activée :
recap-webservice

Nous attirons votre attention sur la confidentialité de cette clé. Toute personne en possession de cette clé pourra récupérer les informations de votre boutique (suivant les droits attribués). De plus, afin d’éviter que cette clé soit interceptée par un hacker, il est vivement recommandé d’activer le protocole HTTPS

Tester le webservice

Il ne nous reste plus qu’à essayer d’accéder aux informations de notre plateforme à travers ce nouveau webservice.
Pour cela, nous allons simplement essayer quelques requêtes depuis notre navigateur.
Tout d’abord, nous allons lister les services auxquels nous avons le droit grâce à notre clé.
Rendez-vous sur votre boutique Prestashop et ajoutez simplement api à la fin de l’adresse :


Un fenêtre va vous demander de vous identifier. Vous devez indiquer votre clé dans le champ « Login » en laissant le mot de passe vide.
auth-webservice-prestashop
Si tout ce passe bien,vous devez voir un retour XML contenant la liste des méthodes autorisées :
Si vous ne voyez pas le XML, essayez d’afficher le code source de votre navigateur.
methods-webservice-prestashop

Ce premier document correspond à la liste des ressources accessibles grâce à cette clé. Vous pouvez voir dans notre exemple que nous avons accès aux ressources suivantes :

Utilisation du webservice produits

En lisant les actualités au sujet de cette fonctionnalité, j’avais cru comprendre que le webservice était de type SOAP.
Vous pouvez maintenant voir que ça ne semble pas du tout être le cas. Il n’y a pas de WSDL, pas d’enveloppe, …
Nous avons à faire à un webservice de type REST.
Le but de cette article n’est pas de vous faire une cours sur REST. Il faut simplement retenir que l’interrogation du service REST se base sur l’URL demandée et la réponse contient les données formatées. Dans le cas de Prestashop, le retour est sous la forme d’une document XML.
En vous rendant sur :


Vous pouvez voir que vous retrouvez bien la liste des identifiants de plusieurs produits.
liste-produits-webservice-prestashop
Maintenant que vous avez les ID des produits, vous pouvez récupérer toutes les informations d’un produit :
infos-produits-webservice-prestashop

Rechercher et filtrer les résultats

Maintenant que l’on a testé que le service fonctionne, on peut avoir envie de faire une vrai requête. Voici quelques exemples de paramètres permettant de rechercher dans vos produits (ou dans toutes autres ressources)

Lister les produits ayant des identifiants compris entre 1 et 20 :

Récupérer les ID des produits ayant une référence commençant par WEB :

Récupérer les ID et les références des produits ayant une référence commençant par WEB :

N’afficher que 100 résultats :

N’afficher que 100 résultats en triant par ID décroissant (les 100 derniers créés):

Pour trier, il suffit de passer le paramètre sort avec l’identifiant à trier et le suffixe _asc (croissant) ou _desc (dcroissant)

Rechercher les produits contenant dans leur description, le mot « Zelda »

Le caractère % est utilisé comme joker. Dans cet exemple, il permet de rechercher les articles qui contiennent Zelda sans forcement commencer ou terminer par Zelda.

Récupère les produits de la catégorie n°4 

Certains paramètres ne sont pas filtrable. Ils sont identifiés par la propriété not_filterable= »true

Conclusion

Vous l’aurez compris, cette fonctionnalité est un grand pas en avant pour Prestashop. Grâce aux web-services, vous allez pouvoir étendre considérablement les possibilités de votre boutique. Cela vous permettra par exemple d’offrir la possibilité à vos partenaires de consulter vos stocks, à vos fournisseurs de récupérer des statistiques, à des applications mobiles (iPad, iPhone, Android …) d’accéder à votre catalogue de produit, …
Le potentiel est là ! Il ne reste plus qu’à trouver des experts pour automatiser les traitements et mettre en place les interconnexions nécessaires. N’hésitez pas à nous contacter si vous souhaitez être accompagné dans la mise en place de webservices.