loranloran

Check Elementor Pro widgets in all databases all websites

Nov 25th, 2025
997
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.52 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # ==============================================================================
  4. # SCANNER ELEMENTOR PRO POUR SERVEURS WHM/CPANEL (CENTOS)
  5. # Recherche les widgets Elementor Pro actifs dans toutes les bases de données
  6. # ==============================================================================
  7.  
  8. # On utilise le fichier de conf root par défaut sur WHM pour ne pas mettre de mot de passe en clair
  9. MYSQL_CMD="mysql --defaults-extra-file=/root/.my.cnf -N -B"
  10.  
  11. # Liste des bases de données système à ignorer
  12. IGNORE_DBS="information_schema|performance_schema|mysql|sys|cphulkd|eximstats|modsec|roundcube|whmxfer"
  13.  
  14. echo "---------------------------------------------------------------------------------"
  15. echo "Démarrage du scan des sites WordPress..."
  16. echo "Format de sortie : [NOM DU SITE] (URL) -> [WIDGETS TROUVÉS]"
  17. echo "---------------------------------------------------------------------------------"
  18.  
  19. # 1. Récupérer toutes les bases de données
  20. DBS=$($MYSQL_CMD -e "SHOW DATABASES")
  21.  
  22. for DB in $DBS; do
  23.     # Ignorer les bases système
  24.     if [[ "$DB" =~ ^($IGNORE_DBS)$ ]]; then continue; fi
  25.  
  26.     # 2. Chercher les préfixes WordPress dans cette base (tables finissant par _options)
  27.     # On récupère le nom complet de la table (ex: wp_options, site2_options)
  28.     TABLES=$($MYSQL_CMD $DB -e "SHOW TABLES LIKE '%_options'")
  29.  
  30.     for TABLE in $TABLES; do
  31.         # Extraire le préfixe (on retire 'options' de la fin)
  32.         PREFIX=${TABLE%options}
  33.  
  34.         # Vérifier si la table postmeta correspondante existe (pour éviter les erreurs sur des DB corrompues)
  35.         CHECK_META=$($MYSQL_CMD $DB -e "SHOW TABLES LIKE '${PREFIX}postmeta'")
  36.         if [ -z "$CHECK_META" ]; then continue; fi
  37.  
  38.         # Récupérer le nom du site et l'URL pour l'affichage
  39.         SITENAME=$($MYSQL_CMD $DB -e "SELECT option_value FROM ${PREFIX}options WHERE option_name = 'blogname' LIMIT 1")
  40.         SITEURL=$($MYSQL_CMD $DB -e "SELECT option_value FROM ${PREFIX}options WHERE option_name = 'siteurl' LIMIT 1")
  41.  
  42.         # 3. La requête SQL Magique
  43.         # Note : J'ai encapsulé la requête précédente pour faire un GROUP_CONCAT
  44.         # Cela permet d'avoir 1 seule ligne par site avec tous les widgets uniques trouvés
  45.  
  46.         QUERY="
  47.        SELECT GROUP_CONCAT(DISTINCT elements_pro_trouves SEPARATOR ', ')
  48.        FROM (
  49.            SELECT
  50.                CONCAT_WS(', ',
  51.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"loop-grid\"%' THEN 'Loop Grid' END,
  52.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"taxonomy-filter\"%' THEN 'Taxonomy Filter' END,
  53.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"form\"%' THEN 'Formulaire' END,
  54.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"nav-menu\"%' THEN 'Menu Nav' END,
  55.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"slides\"%' THEN 'Slides' END,
  56.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"animated-headline\"%' THEN 'Titre Animé' END,
  57.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"price-list\"%' THEN 'Liste de prix' END,
  58.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"price-table\"%' THEN 'Tableau de prix' END,
  59.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"media-carousel\"%' THEN 'Carrousel Média' END,
  60.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"testimonial-carousel\"%' THEN 'Carrousel Témoignages' END,
  61.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"reviews\"%' THEN 'Avis' END,
  62.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"table-of-contents\"%' THEN 'Sommaire' END,
  63.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"countdown\"%' THEN 'Compte à rebours' END,
  64.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"share-buttons\"%' THEN 'Boutons Partage' END,
  65.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"call-to-action\"%' THEN 'Call to Action' END,
  66.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"flip-box\"%' THEN 'Boîte Retournable' END,
  67.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"lottie\"%' THEN 'Lottie' END,
  68.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"gallery\"%' THEN 'Galerie Pro' END,
  69.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"portfolio\"%' THEN 'Portfolio' END,
  70.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"login\"%' THEN 'Connexion' END,
  71.                    CASE WHEN pm.meta_value LIKE '%\"widgetType\":\"global\"%' THEN 'Widget Global' END,
  72.                    CASE WHEN pm.meta_value LIKE '%\"custom_css\":%' THEN 'CSS Personnalisé' END
  73.                ) AS elements_pro_trouves
  74.            FROM ${PREFIX}posts p
  75.            INNER JOIN ${PREFIX}postmeta pm ON p.ID = pm.post_id
  76.            WHERE pm.meta_key = '_elementor_data' AND p.post_status = 'publish'
  77.            HAVING elements_pro_trouves IS NOT NULL AND elements_pro_trouves != ''
  78.        ) AS scan_results;
  79.        "
  80.  
  81.         # Exécution de la requête
  82.         WIDGETS_FOUND=$($MYSQL_CMD $DB -e "$QUERY")
  83.  
  84.         # 4. Affichage du résultat si des widgets sont trouvés
  85.         if [ ! -z "$WIDGETS_FOUND" ] && [ "$WIDGETS_FOUND" != "NULL" ]; then
  86.             echo "SITE: $SITENAME ($SITEURL)"
  87.             echo "   -> Widgets Pro: $WIDGETS_FOUND"
  88.             echo "---------------------------------------------------------------------------------"
  89.         fi
  90.  
  91.     done
  92. done
  93.  
Advertisement
Add Comment
Please, Sign In to add comment