Child pages
  • Guide de l'administrateur système
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Guide de l'administrateur système

Ce guide vous aidera à configurer un serveur Web plus efficace et sûr.

Une fois terminé, vous serez prêt à installer PrestaShop, à l'aide de notre Guide de démarrage.

Configuration PHP

Manipuler php.ini

Nombre des conseils de ce guide requièrent que vous modifiiez le fichier php.ini, qui se trouve dans le dossier d'installation de PHP sur votre serveur (et non le dossier de PrestaShop).

Votre hébergeur ne vous autorisera pas forcément à modifier ou même lire ce fichier. Dans ce cas, n'hésitez pas à le contacter pour réaliser les modifications demandées.

Par exemple, vous n'aurez sans doute pas accès au fichier php.ini sur un hébergeur mutualisé. Si votre hébergeur ne vous offre pas par défaut la configuration requise et que vous ne pouvez pas accéder au php.ini, vous devriez soit passer à un hébergement dédié, ou trouver un hébergeur plus permissif.

Notez cependant que modifier le fichier php.ini reste un acte technique et avancé. Si votre boutique fonctionne bien en l'état, inutile de forcément vouloir toucher à ce fichier, ni de changer d'hébergeur.

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 :

  • MySQL.
  • Bibliothèque GD.
  • Extension Dom.
  • allow_url_fopen.

L'extension MySQL permet l'accès à vos données. PrestaShop ne peut tout simplement pas fonctionner sans.

La bibliothèque GD permet à PHP de manipuler vos images de manière dynamique. PrestaShop l'utilise pour redimensionner et retravailler les fichiers image qui sont mis en ligne (ajout d'un filigrane, rognure, etc.). Sans images, votre boutique perd le plus gros de son attrait ; assurez-vous donc que GD est bien activé !

L'extension Dom permet d'analyser des documents XML. PrestaShop s'en sert pour diverses fonctionnalités, comme le localisateur de magasin. Elle est aussi utilisée par certains modules, ainsi que la bibliothèque pear_xml_parse.

La directive allow_url_fopen permet aux modules de PrestaShop d'accès à des fichiers distants, ce qui est un besoin fondamental du processus de paiement, entre autres choses. Il est donc essentiel que cette directive soit activée.

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

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

Réglages recommandés

Pour un usage optimal, votre installation PHP devrait disposer des réglages et bibliothèques suivants :

  • Reconnaissance GZIP.
  • Bibliothèque Mcrypt.
  • register_globals désactivé.
  • magic_quotes désactivé.
  • allow_url_include désactivé.

La reconnaissance GZip permet au serveur de compresser les pages, images et script avant de les envoyer au navigateur. Cela accélère la navigation du site, et donc offre une meilleure expérience utilisateur.

Mcrypt offre une meilleure couche de sécurité à PHP, permettant l'usage d'algorithme 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 de désactiver cette directive.

La directive magic_quotes échappe (ou "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 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 :

register_globals = Off
magic_quotes_gpc = Off
allow_url_include = Off

Configuration MySQL

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'administateur 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 (ce qui peut arriver quand un utilisateur a accès au mot de passe de l'administrateur).

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

Un utilisateur MySQL par application web

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 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 :

mysql -u USERNAME -p PASSWORD

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

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

Notez que votre hébergeur vous donne sans doute accès à un outil en ligne pour administrer MySQL plus facilement, par exemple cPanel. Utilise-le, car il y a moins de chance que l'hébergeur vous donne accès à la ligne de commande.

Maintenant, nous disposons d'un utilisateur avec uniquement les droits nécessaires pour se connecter à la base de données locale.

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 :

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 à votre serveur.

Vous pouvez maintenant installer PrestaShop en tout 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 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'admin, vous devez ajouter un fichier .htaccess à ce dossier (par exemple, dans /var/www/prestashop/admin) :

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

Explication :

  • AuthUserFile: donne le lien du fichier contenant la liste des utilisateurs autorisés, et leurs mots de passe. .prestashop_admin est un fichier texte.
  • AuthName: défini le message à afficher quand la fenêtre d'authentification s'affiche.
  • AuthType: défini le type d'authentification.
  • Require: demande à ce que les utilisateurs se connectent pour accéder au contenu. valid-user permet à plusieurs utilisateurs de se connecter et d'accéder au dossier.
  • Options: défini les options du dossier. -Indexes désactive la génération automatique d'index de dossier, dans le cas où aucun fichier d'index n'est disponible.

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

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

Ce fichier contient les identifiants et mots de passe hashés de ceux qui sont autorisé à accéder au dossier.
Pour hasher un mot de passe, vous pouvez passer par ce formulaire : Générateur de fichier .htpasswd.

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.

Par exemple :

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

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 :

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

Rendre votre installation de PrestaShop plus sûre

Les recommandations ci-dessus sont arrangées par ordre d'importance :

  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. Protegez 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 ou celui de GRC.
  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.
    1. tous les fichiers readme_xx.txt.
    2. le fichier CHANGELOG.
    3. le dossier /docs.
  5. Interdisez l'accès aux fichiers de votre thème, à l'aide d'un fichier .htaccess ayant le contenu suivant:
    <FilesMatch "\.tpl$">
    order deny,allow
    deny from all
    </FilesMatch>
    

Peaufinage des performances

Cette section vous aidera à mieux comprendre les variables de configuration qui ne sont pas gérées par le back-office, mais directement dans les fichiers de configuration.

This section will help you better understand configuration variables than are not handled using the back-office, but directly in configuration files.

There are four configuration files in PrestaShop, all in the /config folder:

  • config.inc.php : principal fichier de configuration de PrestaShop.
  • defines.inc.php : contient toutes les valeurs constantes de PrestaShop. Elles étaient auparavant définies dans settings.inc.php.
  • settings.inc.php : contient les informations d'accès à la base de données, ainsi que le numéro de version de PrestaShop.
  • smarty.config.inc.php : contient toutes les configurations liées à Smarty, le moteur de template/modèle de PrestaShop.

Fichier config.inc.php

En mode production :

  • Assurez-vous que @ini_set('display_errors', 'Off'); est bien sur "Off".
  • Assurez-vous que {define('PS_DEBUG_SQL', false);}} est bien sur "false".

Au contraire, en mode développement/test, vous pouvez faire remonter les erreurs potentielles :

On contrary, in development/test mode, you can get help tracing possible errors by:

  • en passant @ini_set('display_errors', 'Off'); à "On".
  • en passant define('PS_DEBUG_SQL', false); à "true".

Fichier defines.inc.php

En plus des valeurs constantes, ce fichier contient l'emplacement des tous les fichiers et dossiers. Si vous avez besoin de les changer, n'oubliez pas de conserver l'original à portée de main, dans le cas où vous souhaiteriez revenir à l'ancien emplacement.

Fichier smarty.inc.php

  • $smarty->caching = false;: Smarty's cache system must be disabled because it is not compatible with PrestaShop.
  • IMPORTANT: in production mode, $smarty->force_compile must be set to "false", as it will give a 30% improvement on page load time. On the other hand, when editing a .tpl file, you will have to delete the content of the /tools/smarty/compile folder (except index.php) in order to see the changes live. Note that this setting can also be done in the back-office, in the "Preferences" > "Performance" sub-tab, in the "Smarty" section.
  • $smarty->compile_check should be left to "false".
  • $smarty->debugging gives you access to Smarty's debugging information when your pages are displayed.

Improving PrestaShop's performances

Here are a few tips that should enable you to optimize PrestaShop.

  • Enable MySQL's cache (or ask your web host to do it for you), and give it a high value (for instance, 256M).
  • Do not forget to put the $smarty->force_compile to "false" when in production mode, either via the smarty.inc.php file or the back-office.
  • Whenever possible, use an opcode cache (or ask your web host to install one for you), in order to alleviate the server's processing load. PrestaShop is compatible with eAccelerator. Opcode means "operation code", and defines the compiled state of the dynamic files, which can processed faster.
  • If possible, split your static elements betweens different domains and sub-domains, in order to get parallel HTTP connexions. To put that in place, open the /config/defines.inc.php file and add these lines (adapted to your needs):
    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/'                     ); 
    }
    

Other recommendations

Safe Mode

PHP's Safe Mode is deprecated in the latest version of PHP, and should not be used anymore. For PrestaShop in particular, having Safe Mode on can render your payment modules useless.

Updates

Your applications' PHP code is the only vulnerable path to your server. It is therefore strongly recommended to always update your server's applications: PHP, MySQL, Apache and any other application on which your website runs.

Miscellaneous

The PrestaShop file structure

The PrestaShop developers have done their best to clearly and intuitively separate the various parts of the software.

Here is how the files are organized:

  • /admin: contains all the PrestaShop files pertaining to the back-office. When accessing this folder with your folder, you will be ask to provided proper identification, for security reasons. Important: you should make sure to protect that folder with a .htaccess or .htpasswd file!
  • /cache: contains temporary folders that are generated and re-used in order to alleviate the server's load.
  • /classes: contains all the files pertaining to PrestaShop's object model. Each file represents (and contains) a PHP class, and its methods/properties.
  • /config: contains all of PrestaShop's configuration files. Unless asked to, you should never edit them, as they are directly handled by PrestaShop's installer and back-office.
  • /controllers: contains all the files pertaining to PrestaShop controllers – as in Model-View-Controller (or MVC), the software architecture used by PrestaShop. Each file controls a specific part of PrestaShop.
  • /css: contains all CSS files that are not attached to themes – hence, these are mostly used by the PrestaShop back-office.
  • /docs: contains some documentation. Note: it should be deleted in a production environment.
  • /download: contains your digital products, which can be downloaded: PDFs, MP3s, etc.
  • /img: contains all of PrestaShop's default images, icons and picture files – that, those that do not belong to the theme. This is were you can find the pictures for product categories (/c sub-folder, those for the products (/p sub-folder) and those for the back-office itself (/admin sub-folder}}.
  • /install: contains all the files related to PrestaShop's installer. You will be required to deleted after installation, in order to increase security.
  • /js: contains all JavaScript files that are not attached to themes. Most of them belong to the back-office. This is also where you will find the jQuery framework.
  • /localization: contains all of PrestaShop's localization files – that is, files that contain local information, such as currency, language, tax rules and tax rules groups, states and the various units in use in the chosen country (i.e., volume in liter, weight in kilograms, etc.).
  • /log: contains the log files generated by PrestaShop at various stages, for instance during the installation process.
  • /mails: contains all HTML and text files related to e-mails sent by PrestaShop. Each language has its specific folder, where you can manually edit their content if you wish.
  • /modules: contains all of PrestaShop's modules, each in its own folder. If you wish to definitely remove a module, first uninstall it from the back-office, then only can you delete its folder.
  • /override: this is a special that appeared with PrestaShop 1.4. By using PrestaShop's regular folder/filename convention, it is possible to create files that override PrestaShop's default classes or controllers. This enables you to change PrestaShop core behavior without touching to the original files, keeping them safe for the next update.
  • /themes: contains all the currently-installed themes, each in its own folder.
  • /tools: contains external tools that were integrated into PrestaShop. For instance, this were you'll find Smarty (template/theme engine), FPDF (PDF file generator), Swift (mail sender), PEAR XML Parser (PHP tool).
  • /translations: contains a sub-folder for each available language. However, if you wish to change the translation, you must do so using the PrestaShop internal tool, and not edit them directly in this folder.
  • /upload: contains the files that would be uploaded by clients for customizable products (for instance, a picture that a client wants printed on a mug).
  • /webservice: contains files that enable third-party applications to access PrestaShop through its API.
  • No labels