Trucs et astuces

De petits trucs et astuces pour se faciliter la vie de tous les jours ( quasiment toujours lié à l’univers du web )

WordPress hacké , que faire ?

Suite à la remarque d’un visiteur ( que je remercie encore au passage ), j’ai découvert récemment que le blog avait été hacké et que du contenu de spam était hébergé sur mon domaine.
Ce blog comme beaucoup d’autres utilise WordPress, et à la fois la version globale de WordPress et les plugins sont mis à jour régulièrement.
Je n’ai pas trouvé quelle est la faille initiale qui a permis l’envoi de fichier compromis.
En revanche voici comment j’ai procédé pour corriger.

Installer le plugin WordFence

Après quelques jour du jeu de la chat et la souris de suppression manuelle des fichiers qui revenaient quelques heures plus tard, je me suis décidé à chercher un plugin qui pourrait corriger cela tout seul.

J’ai trouvé Wordfence : https://fr.wordpress.org/plugins/wordfence/ qui est noté plus de 4,5/5 sur près de 4 millions d’installations.
C’est un module freenium ( version gratuite mais avec des fonctionnalité avancées payantes)
La version gratuite est tout à fait suffisante.
L’outil permets de faire directement un scan des fichiers du core wordpress ainsi que de l’ensemble des plugins installés:
Il identifie l’ensemble des fichiers modifiés et permets de visualiser les différences, et même de corriger et nettoyer les fichiers directement depuis le back office en un clic.…

Mysql : identifier les tables manquantes entre 2 bases de données

Un petit article pratique assez générique pour une fois.

Pour un projet récent il fallait que je puisse détecter les tables manquantes entre une base de données « native » et la base de données du projet.

Il existe un certain nombre de logiciels qui le permettent mais je n’en avais pas sous la main.
Navicat permets d’identifier les tables concernées mais pas d’en exporter la liste.

La solution donnée ici permettra de faire tout en ligne de commandes ( linux )

J’ai utilisé l’outil https://github.com/DBDiff/DBDiff comme base.

Il faut commencer par télécharger le phar

wget https://github.com/DBDiff/DBDiff/releases/download/v1.0.0/dbdiff.phar

Ajouter les droits d’exécution au fichier.
Il faut ensuite configurer une connexion pour l’outil dbdiff ( dans le même dossier ou vous allez placer le phar )
Pour cela il faut créer un fichier .dbdiff ( attention au . devant ) avec les identifiants de connexions

server1:
  user: user
  password: password
  port: 3306 # for MySQL this is 3306
  host: 127.0.0.1 # usually localhost or 127.0.0.1
#Mettre la configuration des autres serveurs si nécessaires
server x:

L’outil dbdiff permets ensuite de générer nativement un fichier sql récapitulatif des différences via la commande :

.

10 ans pour le blog !

Les années et défilent, et ça y’est le cap fatidique des 10 ans est déjà arrivé pour le blog 🙂

Je profite de l’occasion pour faire une petite rétrospective du travail qui a été fait sur celui-ci lors de la dernière décennie, et pour partager pour ceux que ça intéressent quelques statistiques.

Pour ceux que ça intéresse, vous pouvez également regarder le premier article 🙂 : Bienvenue sur mon blog !

État des lieux

Tout d’abord au niveau de la ligne éditoriale, comme présenté à l’origine les informations publiées sont avant tout techniques et orientées autour des thématique suivantes :

  • Prestashop
  • Magento
  • Mantis Bug tracker
  • Administration système

Je pense avoir une certaine légitimité sur le sujet puisque ça fait presque aussi longtemps que je travaille sur ces plateformes que j’écris des articles.

L’idée d’écrire des articles sur ce sujet est parti il y’a quelques années.
A une époque ou, trouver des documentations techniques sur les solutions open source se résumait à chercher sur google ( j’éxagère à peine ).…

Prestashop : bloquer les mises à jour de modules dans l’administration

Présentation du problème et solution

C’est un comportement bien connu et assez embêtant auquel je m’attaque aujourd’hui.

Qui n’a jamais pesté d’avoir mis à jour un module dans le back office de Prestashop alors qu’on souhaitait uniquement le configurer ..

Par défaut lorsqu’une mise à jour d’un module est disponible, c’est l’action « Upgrade » qui est l’action par défaut.

Un clic trop rapide et on se retrouve avec une version non testée et donc potentiellement des erreurs sur son site.

J’ai donc créé un petit module qui permets de désactiver l’action du bouton de mise à jour et qui affiche un autre message à la place.

Il est possible de configurer le comportement ( normal ou bloqué ) directement depuis la configuration du module.

Fonctionnement technique

Pour gérer cela nous allons créer un module hh_modulesupdater

Ce module va utiliser la possibilité de surcharger les templates symfony du core en reprenant simplement leur chemin dans un module.

Nous allons donc créer un fichier :
modules/hh_modulesupdater/views/PrestaShop/Admin/Module/Includes/action_button.html.twig

Utiliser et configurer un proxy socks en local avec votre serveur dédié

Un petit tutoriel rapide pour faire face à une problématique que j’ai rencontré récemment.

Avec mon fournisseur d’accès à internet je n’ai pas d’adresse ip fixe, c’est gênant pour accéder à certains environnements dont l’accès est soumis à des restrictions d’ips.

Je possède en revanche plusieurs serveurs dédiés sur internet qui eux ont bien des ips fixes.
Vous l’aurez compris l’idée va être de se connecter à travers l’un de ces serveurs pour obtenir une ip fixe également.

La configuration de cette connexion est facile et ne prendra pas plus de 2 minutes 🙂

Les prérequis sont les suivants :

  • Accès ssh à un serveur
  • Système linux ou WSL disponible
  • Extension FoxyProxy

Gestion de la connexion ssh

Pour se simplifier la vie on va configurer ce proxy directement dans le fichier ~/.ssh/config de la même manière que pour n’importe quelle connexion ssh :

Host herve.tunnel
 Hostname myserverNameOrIP
 User ServeurUser
 Port ServerPort
 DynamicForward 8000 #Attention à cette ligne

Remplacez bien évidemment les informations du hostname de l’user et du port par les accès à votre serveur.…

Simplifiez vous la console sous windows avec Terminal

Pour des raisons techniques j’ai récemment du repasser sous windows pour quelques jours.

En étant habitué la console linux c’est un énorme retour en arrière d’utiliser la console standard de windows  ( cmd ) d’autant quelle ne gère pas nativement la connexion ssh

Mon usage de la console est essentiellement basé autour la connexion à des serveurs web, ou des commandes git sous windows j’utilise le sous-sytème wsl pour gérer toutes ces commandes.

J’utilisais déjà pour remédier à ça l’alternative cmder https://cmder.net/

Qui rendait déjà les choses bien plus pratiques avec sa gestion multi-onglets et le chargement de profils.
Mais  j’avais pas mal de problèmes dans la gestion des flèches lors de l’édition des fichiers avec vim qui me faisait souvent perdre du temps

J’ai donc profiter la sortie officielle de la version 1.0 de terminal et j’ai été assez séduit par son fonctionnement et son utilisation :

  • Gestion multi-onglets
  • Types de fenêtres ( cmd / powershell / wsl )

Si vous utilisez souvent la console sous windows je pense que c’est un outil que vous adopterez très vite 🙂

Vous pouvez l’installer depuis le lien suivant :
https://www.microsoft.com/fr-fr/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab

Commandes console git utiles

Dans le développement git est un outil très puissant et très pratique que j’utilise au quotidien.
Majoritairement via son intégration dans PhpStorm ( très intuitive )

Mais dans certains cas il est  nécessaire d’utiliser la ligne de commande
Voici donc une petite liste de commandes git utiles en fonction des situations

Configuration générale

Définir/modifier l’user et l’email du dépôt courant

git config user.name "Your username"
git config user.email "email@test.com"

 

Création d’un projet

Initialisation d’un projet local (dans le dossier courant )

git init .

Initialisation d’un projet distant ( dans le dossier courant )

git clone https://yourrepositoryurl.com/repo.git .

 

Gestion des fichiers

Ajout de modification

git add path

Annuler les modifications sur un fichier ou un dossier

git checkout -- path

 

Suivre l’état de mon dépôt local

Visualisation du statut global du dépôt

git status

Visualisation des fichiers modifiés

git ls-files -m

Visualisation des fichiers supprimés

git ls-files -d

Valider mes modifications

git commit -m "message de commit"

Voir la liste des modifications apportées

git log

Voir la liste des modifications apportées (version simplifiée)

git log --oneline

 

Mettre à jour mon dépôt local

Lister les dépots distants

git remote -v

Associer la branche locale à une branche distante

git branch --set-upstream-to=orignin/branchName

Récupération des informations distantes

git pull origin branchName

Réinitialisation de la branche locale comme la branche distante ( attention efface tout l’historique local )

git reset --hard origin/branchName

 

Gestion des branches

Création d’une branche

git checkout -b branchName

Changement de branche

git checkout branchName

Fusioner une branche dans la branche courante

git merge branchName

Lister les branches du dépot

git branch -a

Supprimer une branche du dépôt local ( si déjà mergée ou poussée )

git branch -d branchName

Supprimer une branche du dépôt local (peu importe son statut )

git branch -D branchName

Supprimer une branche du dépôt distant

git push origin --delete branchName

Publier des releases github via un script

Pour une fois un article qui n’est pas lié directement à une technologie en particulier , mais à la plateforme de sources github.
J’ai plusieurs modules qui sont disponibles sur cette plateforme et pour lequel un clone du dépôt ne permets pas d’obtenir un module fonctionnel.

Pour  cette raison il est nécessaire de créer des « releases » qui sont disponibles sur une page spécifique du dépot ( ex:  https://github.com/nenes25/eicaptcha/releases ) et sur lequel on peut mettre à disposition une archive ( ou tout autre fichier ) associé à la release à télécharger :

Ei captcha releases

Il est possible de faire cela manuellement directement depuis l’interface github, mais par principe manuellement c’est plus lent et plus souvent source d’erreurs qu’un script automatique.
Nous allons donc voir comment scripter tout ça en utilisant l’api v3 de github et curl.

Sachant que dans mon cas j’ai les prérequis suivants :

Je pense qu’il est possible de faire l’ensemble de la procédure ci-dessous via un script bash, mais pour moi c’était plus facile de le faire en php.…

Prestashop : Récupérer une configuration directement depuis un template

J’ai récemment rencontré la problématique de devoir utiliser des variables de configuration dans plusieurs templates non liés d’un site prestashop.
Plutôt que de surcharger l’ensemble des controllers impacté , je suis passé par la solution d’ajouter une nouvelle fonctionnalité directement dans Smarty.
Tout ça sans surcharge et via un module qui fonctionne sur PS 1.6 et 1.7

Le code est relativement simple :

class HhConfigTemplate extends Module
{
    public function __construct()
    {
        $this->author    = 'hhennes';
        $this->name      = 'hhconfigtemplate';
        $this->tab       = 'front_office_features';
        $this->version   = '0.1.0';
        $this->bootstrap = true;
        parent::__construct();
 
        $this->displayName = $this->l('HH Config Template');
        $this->description = $this->l('HH Config Template');
    }
 
    public function install()
    {
        if (!parent::install()
            || ! $this->registerHook('displayHeader')
           ) {
            return false;
        }
 
        return true;
    }
 
    public function uninstall()
    {
        return parent::uninstall();
    }
 
    /**
     * Hook Header Ajout d'une fonction dans smarty
     * @param $params
     */
    public function hookDisplayHeader($params)
    {
        //Enregistrement de la fonction "Configuration" dans Smarty qui appelle la fonction "getConfiguration" de cette classe
        smartyRegisterFunction($this->context->smarty, 'function', 'Configuration', array($this, 'getConfiguration'));
    }
 
    /**
     * Récupération d'une configuration
     * @param array $params
     * @return string
     */
    public static function getConfiguration($params)
    {
        if ( isset($params['key'])) {
            return Configuration::get($params['key'],
                isset($params['id_lang']) ?

Magento : Configurer plusieurs boutiques sur une seule instance

Nativement la plateforme Magento permets de créer plusieurs sites webs totalement différents tout en utilisant le même code et le même dossier sur votre serveur et cela avec des urls différentes !

Il est cependant ensuite nécessaire de réaliser un mapping pour que Magento trouve quelle boutique charger avec quelle url

En partant des pré-requis suivants :

  • votre configuration apache ou nginx est déjà en place et que l’ensemble des noms de domaines pointent bien vers le même dossier
  • Nous allons tester 3 sites
    • www.shop.fr ( Site FR / Code du magasin magento : fr )
    • www.shop.de ( Site DE / Code du magasin magento : de )
    • www.shop.com ( Site EN / Code du magasin magento : en )
  • Les configurations des magasins sont en place dans magento

Nous allons voir ensemble les différentes possibilités qui existent pour réaliser cela.

Serveur Apache : fichier .htacess
Editer le fichier .htacess situé à la racine de magento et rajouter les lignes suivantes

SetEnv MAGE_RUN_TYPE store
SetEnvIf Host www\.shop\.fr