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

...

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

...

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.

...

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.

...

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;

...

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 de ceux qui sont 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 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>
    

...

  • 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 code PHP de vos applications est la seule vulnérabilité de votre serveur. Il vous faut donc vous assurez de toujours utiliser les dernières version versions de vos applications : PHP, MySQL, Apache et toute les autres applications en place sur votre serveur.

...

  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és données de votre installation de PrestaShop, et cliquez sur le bouton "Exécuter". Enregistrez le fichier sur votre disque dur. Si phpMyAdmin arrive a à 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 assurez assurer que votre boutique fonctionne comme attendu.

...

  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 assurez assurer que votre boutique fonctionne comme attendu.