Child pages
  • Guide de l'administrateur système

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Table des matières

Table of Contents
maxLevel3

...

Guide de l'administrateur système

...

Modifier le fichier de configuration de PHP requiert que vous touchiez à certains réglages du fichier php.ini, ce qui la plupart du temps consiste à activer ou désactiver une option (passer de "On" à "Off" et vice-versa. Le fichier contient beaucoup de documentation pour chacune de ses lignes : lisez bien celles qui concernent votre modification afin de mieux comprendre celles-ci. Faites attention à ce que vous modifiez, car cela a un résultat direct sur la manière dont PHP fonctionne, et donc sur la stabilité ou même la sécurité de votre serveur.

...

Prérequis système essentiels

Pour que PrestaShop 1.4.x fonctionne correctement, il faut que votre configuration de PHP dispose des réglages et bibliothèques suivants :

...

En résumé, il est essentiel que les directives suivantes aient les réglages indiqués :

Code Block
html
html

extension = php_mysql.dll
extension = php_gd2.dll
allow_url_fopen = On

...

Mcrypt offre une meilleure couche de sécurité à PHP, permettant l'usage d'algorithme algorithmes de hash et de chiffrement.

Une fois activée, la directive register_globals passe les variables d'environnement (GET, POST, COOKIE, SERVER...) en variables globales. Il n'est pas recommandé d'utiliser de telles variables, car un utilisateur pourrait facilement enregistrer une valeur à l'aide de la méthode GET, par exemple. Il est donc impérative impératif de désactiver cette directive.

La directive magic_quotes échappe (ou autrement dit, elle "ajoute un antislash|" (http://php.about.com/od/phpfunctions/g/addslashes_php.htm]") automatiquement les caractères spéciaux (', ", \, NULL) pour toutes les variables d'environnement (GET, POST, COOKIE, SERVER...). Cette option doit être désactivée car elle ajoute un antislash à toutes les variables, même celles n'en ayant pas besoin. De plus, certaines applications web sont mal conçues, et pourraient se retrouver avec deux antislash au lieu d'un, aboutissant à des donnés inexploitables.

La directive allow_url_include permet d'inclure un fichier à l'aide des déclaration déclarations require et include, même s'il ne vient pas de votre serveur. Cette option doit être désactivée, car dès qu'une application sur votre serveur la prend mal en compte, votre serveur devient vulnérable : un utilisateur pourrait ajouter n'importe quel fichier en provenance de n'importe quel serveur, et celui-ci serait exécuté sur votre propre serveur.

En somme, il est fortement recommandé que les directives suivantes aient les réglages indiqués :

Code Block
html
html

register_globals = Off
magic_quotes_gpc = Off
allow_url_include = Off

...

Le compte d'administrateur MySQL par défaut est souvent "root" ou "admin", et donne accès à l'ensemble du contenu de la base de données, quel que soit le propriétaire de la base de données. L’administrateur a tous les droits, et peut lancer n'importe quelle action. Il vous faut donc protéger vos bases de données, afin d'empêcher que vos applications ne tombent sous le coup d'injections SQL (lire http://fr.wikipedia.org/wiki/Injection_SQL), ce qui peut arriver quand un utilisateur a accès au mot de passe de l'administrateur).

Warning

Si vous venez d'installer MySQL, donnez un mot de passe au compte "root", qui par défaut n'en a pas.

...

Chaque fois que vous installez une nouvelle application web sur votre serveur, vous devez créer un nouvel utilisateur MySQL qui ne dispose que des droits strictement nécessaires à la gestion des données de cette application. N'utilisez PAS le même nom d'utilisateur pour gérer les bases de données de touts toutes les applications web installées.

Ainsi, si vous disposez d'un compte MySQL capable de créer d'autres utilisateurs, voici comme s'y prendre en ligne de commande :

Code Block
html
html

mysql -u USERNAME -p PASSWORD

Vous pourriez également utiliser la requête SQL suivante:

Code Block
html
html

mysql> USE mysql;
mysql> CREATE USER 'username'@'servername' IDENTIFIED BY 'new_password';

...

Nous devons autoriser cet utilisateur à utiliser la base de données de PrestaShop, et configurer ses droits par la même occasion. Voici un modèle de requête SQL :

Code Block
html
html

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER
     > ON 'prestashop'.* TO 'new_user'@'localhost';
mysql> FLUSH PRIVILEGES;

Nous disposons maintenant d'un utilisateur pour la base de données "prestashop". Pensez à faire ceci pour chacune des applications web que vous ajouter ajoutez à votre serveur.

Vous pouvez maintenant installer PrestaShop en tout toute sécurité.

Établissement d'une authentification de base (.htaccess)

Afin de mieux protéger votre installer PrestaShop, nous devons établir une authentification de base pour votre dossier d'administration.

L'un des buts du fichier .htaccess (lire http://fr.wikipedia.org/wiki/.htaccess) est de protéger vos dossiers et tous ceux qu'il contient. Cela ne fonctionne que pour les serveurs Apache, et une poignée d'autres. Assurez-vous que vous utilisez un serveur Apache avant de créer un fichier .htaccess.

Pour mettre en place une authentification de base sur votre dossier d'administration, vous devez ajouter un fichier .htaccess à ce dossier (par exemple, dans /var/www/prestashop/admin) :

Code Block
html
html

AuthUserFile /var/www/.prestashop_admin
AuthName "Prestashop Admin Access"
AuthType Basic
Require valid-user
Options -Indexes

...

Voici un modèle de contenu pour le fichier .prestashop_admin avec deux logins et leurs mots de passe :

Code Block
html
html

login1:$apr1$/wJeliK8$e9OzgRaVL8J8wSsFBXjor1
login2:$apr1$yV65Kqqz$cFt3sV2.Q7hhLRRUJDo5a/

Ce fichier contient les identifiants et les "hash" des mots de passe hashés de ceux qui sont autorisé autorisés à accéder au dossier (un hash est une "empreinte" unique d'une chaîne de caractère, permettant de l'identifier rapidement.
Pour hasher créer le hash d'un mot de passe, vous pouvez passer par ce formulaire : Générateur générateur de fichier .htpasswd : http://aspirine.org/htpasswd.html.

Il est chaudement recommandé de mettre ce fichier dans un dossier qui n'est pas accessible à vos applications web, donc au-dessus du dossier /openbase_dir. Cela empêche les injections au fichier .htpasswd, dans le cas où l'une de vos applications était vulnérable.

...

Il est également possible de limité l'accès par domaine ou adresse IP, via le fichier .htaccess :

Code Block
html
html

Order Allow, Deny
Deny from all
Allow from .myprestashop.com
Allow from 127.0.0.1

Cependant, vous ne devriez pas utiliser cette sorte de directive :

Code Block
html
html

<LIMIT GET POST>
Require valid-user
</LIMIT>

...

  1. Sécuriser le back-office
    1. Renommez votre dossier /admin après l'installation de PrestaShop. C'est essentiel, au point que vous ne pouvez pas accéder à votre administration si vous n'avez pas fait cette modification. Assurez-vous d'utiliser un nom de dossier réellement unique, idéalement un mélanger de lettre et de chiffres, par exemple "pr3st4dm1n".
    2. Protégez votre dossier d'administration avec les fichiers .htaccess et .htpasswd, ou demandez à votre hébergeur de le faire pour vous.
    3. Ne laissez pas votre navigateur garder la trace de vos mots de passe (via des cookies ou n'importe quel autre outil).
    4. Choisissez un mot de passe complexe, mélangeant lettres, chiffres et même ponctuation, comme "5r3XaDR#". Vous pouvez et même devriez utiliser un générateur de mot de passe, tel que celui de PCTools (http://www.pctools.com/guides/password/) ou celui de GRC (https://www.grc.com/passwords.htm).
  2. Sécuriser votre installation PHP
    1. Utilisez les réglages PHP requis et recommandés, au début du présent document.
  3. Effacez toujours le dossier /install de votre serveur après avoir installé ou mis à jour PrestaShop.
  4. Effacez les fichiers inutiles de votre serveur de production . :
    • tous les fichiers readme_xx.txt.
    • le fichier CHANGELOG.
    • le dossier /docs.
  5. Interdisez l'accès aux fichiers de votre thème, à l'aide d'un fichier .htaccessayant le contenu suivant:

    Code Block
    html
    html
    
    <FilesMatch "\.tpl$">
    order deny,allow
    deny from all
    </FilesMatch>
    

...

  • $smarty->caching = false; : le système de cache de Smarty doit être désactivé, parce qu'il n'est pas compatible avec PrestaShop.
  • IMPORTANT : en production, $smarty->force_compile doit être mis à "false", car cela améliorera des 30 % le temps de chargement de la page. En revanche, lors de la modification d'un fichier .tpl, vous devrez effacer le dossier /tools/smarty/compile (sauf son fichier index.php) afin de voir les modification modifications en action place dans votre navigateur. Notez que ce réglage peut également être fait dans le back-office, dans le sous-onglet "Performance" de l'onglet "Préférences", section "Smarty".
  • $smarty->compile_check devrait être laissé à "false".
  • $smarty->debugging vous donne accès aux informations de débogage de Smarty quand les pages sont affichées.

...

  • Activer le cache de MySQL (ou demandez à votre hébergeur de le faire pour vous), et donnez-lui une taille élevée (par exemple, 256M).
  • N'oubliez pas de mettre $smarty->force_compile à "false" quand vous passez en mode de production, que ce soit via le fichier smarty.inc.php ou le back-office.
  • Si vous le pouvez, utiliser un cache d'opcode (ou demandez à votre hébergeur d'en installer un pour vous), afin d'alléger la charge de traitement du serveur. PrestaShop est compatible avec eAccelerator (http://eaccelerator.net/). "Opcode" signifie "code opérationnel", et défini l'état de compilation des fichiers dynamiques, qui peuvent être traités plus rapidement.
  • Si possible, placez vos éléments statiques sur plusieurs domaines ou sous-domaines, afin de profiter de connexions HTTP parallèles. Pour ce faire, ouvrez le fichier /config/defines.inc.php et ajoutez-y ces lignes (adaptées à vos propres besoins) :
Code Block
html
html

if ( $_SERVER['REMOTE_ADDR'] != '127.0.0.1' )
{
  define( '_THEME_IMG_DIR_',   'http://img2.xxx.com/'       );
  define( '_THEME_CSS_DIR_',   'http://css.xxx.com/'        );
  define( '_THEME_JS_DIR_',    'http://js.xxx.com/'         );
  define( '_THEME_CAT_DIR_',   'http://img1.xxx.com/c/'     );
  define( '_THEME_PROD_DIR_',  'http://img1.xxx.com/p/'     ); 
  define( '_THEME_MANU_DIR_',  'http://img1.xxx.com/m/'     ); 
  define( '_PS_IMG_',          'http://img1.xxx.com/'       ); 
  define( '_PS_ADMIN_IMG_',    'http://img1.xxx.com/admin/' ); 
} else { 
  define( '_THEME_IMG_DIR_',   _THEMES_DIR_ . _THEME_NAME_ . '/img/' ); 
  define( '_THEME_CSS_DIR_',   _THEMES_DIR_ . _THEME_NAME_ . '/css/' ); 
  define( '_THEME_JS_DIR_',    _THEMES_DIR_ . _THEME_NAME_ . '/js/'  ); 
  define( '_THEME_CAT_DIR_',   __PS_BASE_URI__ . 'img/c/'            ); 
  define( '_THEME_PROD_DIR_',  __PS_BASE_URI__ . 'img/p/'            ); 
  define( '_THEME_MANU_DIR_',  __PS_BASE_URI__ . 'img/m/'            ); 
  define( '_PS_IMG_',          __PS_BASE_URI__ . 'img/'              ); 
  define( '_PS_ADMIN_IMG_',    _PS_IMG_.'admin/'                     ); 
}

...

Le Safe Mode de PHP est obsolète dans la dernière version versions de PHP, et ne devrait plus être utilisé. En particulier, sous PrestaShop, il peut rendre vos modules de paiement inutilisable.

...

Le code PHP de vos applications est la seule vulnérabilité de votre serveur. Il vous faut donc vous assurez de toujours uiliser utiliser les dernières version versions de vos applications : PHP, MySQL, Apache et oute toute les autres applications en place sur votre serveur.

...

  • /admin : contient tous les fichiers de PrestaShop relatifs au back-office. Si vous cherchez à accéder à ce dossier à l'aide de votre navigateur, il vous sera demandé de vous authentifier, pour des raisons de sécurité. Important : faites en sorte que ce dossier reste protéger par des fichiers .htaccess et .htpasswd?
  • /cache: contient des dossiers temporaires qui sont générés et réutilisés afin d'alléger la charge du serveur.
  • /classes : contient tous les fichiers relatifs au modèle Objet de PrestaShop. Chaque fichier représente (et contient) une classe PHP, et ses méthodes et propriétés.
  • /config : contient tous les fichiers de configuration de PrestaShop. Ne modifiez jamais ces fichiers, sauf on vous le demande expressément, car ils sont gérés directement par l'installateur et le back-office de PrestaShop.
  • /controllers : contient tous les fichiers relatifs aux contrôleurs de PrestaShop (dans le cadre Modèle-Vue-Contrôleur (ou MVC), l'architecture logicielle sur laquelle repose PrestaShop. Chaque fichier contrôle une partie précise de PrestaShop.
  • /css : contient tous les fichiers CSS qui ne sont pas liés aux thèmes ; de fait, ils sont la plupart du temps utlisés utilisés par le back-office de PrestaShop.
  • /docs : contient un peu de documentation. Note : vous devriez les effacer dans un environnement de production.
  • /download : contient tous vos produits numériques, pouvant être téléchargés : fichiers PDFs, MP3s, etc.
  • /img : contient toutes les images par défaut de PrestaShop, c'est à dire celles qui n'appartiennent pas au thème. C'est ici que vous trouverez les sous-dossiers des images pour les catégories de produits (/c, celles des produits (sous-dossier /p) et celle pour le back-office lui-même (sous-dossier /admin}}.
  • /install : contient tous les fichiers relatifs à l'installateur de PrestaShop. Vous devriez l'effacer après installation, afin d'améliorer la sécurité.
  • /js : contient tous les fichiers JavaScript qui ne sont pas liés aux thèmes. La plupart appartiennent au back-office. C'est également ici que vous trouverez le framework jQuery.
  • /localization : contient tous les fichiers de localisation de PrestaShop – c'est à dire, les fichiers qui contiennent des informations locales, comme la monnaie, la langue, les règles de taxes et les groupes de règles de taxes, les états et autres unités utilisées dans le pays choisi (par exemple, le volume en litre, le poids en kilogrammes, etc.).
  • /log : contient les fichiers de log générés par PrestaShop lors de diverses étapes, par exemple pendant le processus d'installation.
  • /mails : contient tous les fichiers HTML et textes relatifs aux e-mails envoyés par PrestaShop. Chaque langue dispose de son propre dossier, où vous pouvez modifier manuellement ce que vous souhaitez.
  • /modules : contient tous les modules de PrestaShop, chacun dans son propre dossier. Si vous souhaitez enlever définitivement un module, commencez par le désinstaller depuis le back-office, puis effacez son dossier à la main.
  • /override : il s'agit d'un dossier particulier, apparu à partir de la version 1.4 de PrestaShop. En utilisant la convention de nommage de dossier et fichiers de PrestaShop, il devient possible de créer des fichiers qui supplantes les classes et contrôleurs par défaut de PrestaShop. Cela vous permet de modifier le comportement fondamental de PrestaShop sans toucher aux fichiers originaux, ce qui les garde intact en prévision de la prochaine mise à jour.
  • /themes : contient tous les thèmes actuellement installés, chacun dans son propre dossier.
  • /tools : contient les outils externes qui ont été intégré à PrestaShop. Par exemple, c'est ici que vous trouverez Smarty (moteur de thème), FPDF (générateur de fichiers PDF), Swift (expediteur expéditeur d'e-mails), PEAR XML Parser (outil PHP).
  • /translations : contient un sous-dossier pour chaque langue. Cependant, si vous souhaitez modifier les traductions, vous devez utiliser l'outil interne de PrestaShop, et surtout pas les modifier directement dans ce dossier.
  • /upload : contient les fichiers qui ont été mis en ligne par les clients pour personnlisés personnalisés vos produits (par exemple, une image à imprimer sur un mug).
  • /webservice : contient les fichiers qui permettent aux applications tierces de se connecter à PrestaShop, au travers de son API.

Déplacer PrestaShop

Une installation de PrestaShop ne reste pas à vie au même emplacement physique. Il existe de nombreuses raisons pour lesquelles vous pourriez avoir besoin de déplacer les fichiers et données de PrestaShop :

  • Déplacer votre boutique depuis votre ordinateur vers votre serveur en ligne.
  • Déplacer votre boutique depuis un sous-domaine de test vers le domaine principal.
  • Déplacer votre boutique depuis un serveur vers un autre.
  • Déplacer votre boutique depuis un sous-domaine vers un autre.

Pour chacune de ces circonstances, vous devez faire attention à déplacer correctement tous vos fichiers (dont vos images personnalisées, vos thèmes, les modules que vous avez acheté...) et toutes vos données (qui sont contenues dans votre base de données MySQL).

Déplacer PrestaShop vers un nouveau serveur

Voici les principales étapes à valider lors d'un changement de serveur, ou lors du transfert depuis votre disque dur jusqu'au serveur en ligne :

  1. Mettez votre boutique en mode de maintenance, afin de ne pas perdre de nouveaux clients ou des commandes pendant le déplacement des données.
    Rendez-vous sur votre back-office, et sous l'onglet "Préférence", réglez l'option "Activer la boutique" à "Non".
  2. Déplacez vos fichiers
    1. Faites une sauvegarde de tous vos fichier : connectez-vous à votre serveur FTP, et copiez tous les fichiers et dossiers vers votre disque dur.
    2. Transférez les fichiers vers le nouvel hébergeur : connectez-vous au serveur FTP de votre nouvel hébergeur, et copiez-y tous les fichiers et dossier que vous avez téléchargé précédemment sur votre disque dur, tels quels.
  3. Déplacez vos données
    1. Faites une sauvegarde de votre base de données (un "dump") : connectez-vous à phpMyAdmin, cliquez sur l'onglet "Exporter", sélectionnez la base de données de votre installation de PrestaShop, et cliquez sur le bouton "Exécuter". Enregistrez le fichier sur votre disque dur. Si phpMyAdmin arrive à expiration avant l'export de toutes vos données, contactez votre hébergeur.
    2. Transférez votre dump SQL vers votre nouvelle base de données : connectez-vous au phpMyAdmin de votre nouveau serveur, cliquez sur le bouton "Importer", cliquez sur le bouton "Parcourir...", trouvez le fichier SQL que vous avez téléchargé, et cliquez sur le bouton "Exécuter" pour le mettre en ligne. Si phpMyAdmin arrive a expiration avant l'import de toutes vos données, contactez votre nouvel hébergeur.
  4. Configuration
    1. Sur le nouveau serveur, ouvrez le fichier /config/settings.inc.phpet mettez à jour les réglages de la base de données (avec vos propres informations plutôt que les exemples donnés ci-dessous) :
      • define('_DB_SERVER_', 'sql.domainname.com');
      • define('_DB_NAME_', 'prestashop');
      • define('_DB_USER_', 'PS-user');
      • define('_DB_PASSWD_', 'djsf15');
      • define('_DB_PREFIX_', 'ps_');
    2. (version 1.4 et précédentes) Dans ce même fichier, mettez à jour le réglage l'URI de base ('/' étant la racine du serveur) :
      • define('__PS_BASE_URI__', '/prestashop/');
    3. Connectez-vous à votre back-office, rendez-vous dans l'onglet "Préférences", sélectionnez le sous-onglet "SEO & URLs", et modifiez le nom du domaine pour y mettre votre nouveau domaine. Faites de même pour votre domaine SSL.
      Dans les faits, cela mettra à jour les lignes "PS_SHOP_DOMAIN" et "PS_SHOP_DOMAIN_SSL" de la table SQL "ps_configuration".
    4. Dans votre back-office, rendez-vous dans l'onglet "Outils", sous-onglet "Générateurs", et regénérez le fichier .htaccess ainsi que le fichier robots.txt.
  5. Connectez-vous à votre serveur FTP et effacez le contenu des dossiers suivants, sauf le fichier index.php :
    • /tools/smarty/cache
    • /tools/smarty/compile
    • /tools/smarty_v2/cache
    • /tools/smarty_v2/compile
  6. Dans votre back-office, sous l'onglet "Préférences", mettez l'option "Activer la boutique" à "Oui".

C'est fait ! Vérifiez bien que tous vos liens fonctionnent, que tous vos produits, images, modules et thèmes sont toujours en place, et essayez de créer un nouveau compte ainsi que de passer une commande afin de vous assurer que votre boutique fonctionne comme attendu.

Déplacer PrestaShop vers un nouveau domaine

Voici les principales étapes à valider lors d'un changement de domaine. Ce sont en fait une version simplifiée des étapes ci-dessus, sauf que nous ne touchons pas aux données, qui restent sur le même serveur SQL.

  1. Mettez votre boutique en mode de maintenance, afin de ne pas perdre de nouveaux clients ou des commandes pendant le déplacement des données.
    Rendez-vous sur votre back-office, et sous l'onglet "Préférence", réglez l'option "Activer la boutique" à "Non".
  2. Déplacez vos fichiers
    1. Faites une sauvegarde de tous vos fichier : connectez-vous à votre serveur FTP, et copiez tous les fichiers et dossiers vers votre disque dur.
    2. Transférez les fichiers vers le nouvel hébergeur : connectez-vous au serveur FTP de votre nouvel hébergeur, et copiez-y tous les fichiers et dossier que vous avez téléchargé précédemment sur votre disque dur, tels quels.
  3. Configuration
    1. Sur le nouveau serveur, ouvrez le fichier /config/settings.inc.phpet mettez à jour les réglages de la base de données (avec vos propres informations plutôt que les exemples donnés ci-dessous) :
      • define('_DB_SERVER_', 'sql.domainname.com');
      • define('_DB_NAME_', 'prestashop');
      • define('_DB_USER_', 'PS-user');
      • define('_DB_PASSWD_', 'djsf15');
      • define('_DB_PREFIX_', 'ps_');
    2. (version 1.4 et précédentes) Dans ce même fichier, mettez à jour le réglage l'URI de base ('/' étant la racine du serveur) :
      • define('__PS_BASE_URI__', '/prestashop/');
    3. Connectez-vous à votre back-office, rendez-vous dans l'onglet "Préférences", sélectionnez le sous-onglet "SEO & URLs", et modifiez le nom du domaine pour y mettre votre nouveau domaine. Faites de même pour votre domaine SSL.
      Dans les faits, cela mettra à jour les lignes "PS_SHOP_DOMAIN" et "PS_SHOP_DOMAIN_SSL" de la table SQL "ps_configuration".
    4. Dans votre back-office, rendez-vous dans l'onglet "Outils", sous-onglet "Générateurs", et regénérez le fichier .htaccess ainsi que le fichier robots.txt.
  4. Connectez-vous à votre serveur FTP et effacez le contenu des dossiers suivants, sauf le fichier index.php :
    • /tools/smarty/cache
    • /tools/smarty/compile
    • /tools/smarty_v2/cache
    • /tools/smarty_v2/compile
  5. Dans votre back-office, sous l'onglet "Préférences", mettez l'option "Activer la boutique" à "Oui".

C'est fait ! Vérifiez bien que tous vos liens fonctionnent, que tous vos produits, images, modules et thèmes sont toujours en place, et essayez de créer un nouveau compte ainsi que de passer une commande afin de vous assurer que votre boutique fonctionne comme attendu.