Tout d'abord, je voudrais me vérifier:
Une extension est un agrégat de modules, plugins et composants, non?
Si c'est le cas, les modules, plugins et composants ont les mêmes versions. Est-ce aussi vrai?
Le problème est le suivant: dans le cadre de la recherche de sécurité que je mène, j'ai besoin de découvrir les versions des extensions utilisées sur un (n'importe quel) site Joomla donné.
Dans les cas simples, la version est déjà écrite comme ici:
JWallpapers - A lightweight yet powerful image gallery component with community building capabilities
*
* @version 2.2.2 $Id: default.css 558 2010-12-16 12:29:41Z amazeika $
* @package JWallpapers
* @copyright Copyright (C) 2009 Arunas Mazeika, http://www.wextend.com. All rights reserved
* @author Arunas Mazeika
* @license GNU General Public License v2+ (GNU GPL v2+). See license.php
*
*/
#picture_container,#picture_right_content,#thumbs_right_section,#thumbs_left_section,#frontend_tagging_section,#pic_tags_section
{
float: left;
border: none !important;
}
.jw_category_title {
float: left;
border: none !important;
}
Mais comment puis-je trouver la version d'une extension s'il n'y a pas un tel enregistrement?
J'ai aussi regardé ici mais le répondeur a utilisé un script php. Est-il possible pour un utilisateur habituel d'exécuter un tel script?
Existe-t-il d'autres moyens de découvrir les versions d'extension sur les sites Joomla?
Avis de non-responsabilité: Il s'agit uniquement de rechercher d'éventuelles vulnérabilités de sécurité dans Joomla
UDP_1
J'utilise un OWASP-ZAP pour obtenir l'arborescence du site, je veux dire que j'obtiens chaque fichier dans chaque répertoire. Comme ça : .
Un module, un plugin ou un composant pourrait-il donc laisser une marque ailleurs (je veux dire non seulement dans le répertoire des composants, par exemple)?
Comme l'a dit @Sharky, vous pouvez vérifier les versions d'extension en accédant à leurs fichiers manifestes. Voici le chemin de ces fichiers pour chaque type d'extension:
Composant:
../administrator/components/com_extension_name/extension_name.xml
Module:
../modules/mod_extension_name/mod_extension_name.xml
Plugin:
../plugins/plugin_type/extension_name/extension_name.xml
Modèle:
../templates/extension_name/templateDetails.xml
Si vous n'êtes pas administrateur du site, vous ne pouvez pas avoir toutes ces informations. Si vous savez quelles extensions sont installées, vous pouvez vérifier leurs versions en accédant à leurs fichiers manifestes. Par exemple, vous pouvez découvrir Joomla! version en accédant à administrator/manifests/files/joomla.xml
fichier.
Le plus proche que vous pouvez obtenir pour savoir quelles extensions sont installées est de compiler une liste d'autant d'extensions que vous pouvez trouver dans la nature et d'écrire un script pour vérifier si les fichiers manifestes existent sur le site Web.
l'extension est un agrégat de modules, plugins et composants?
Une extension , n'est pas la combinaison d'un composant, d'un module et d'un plugin. Voici ce qu'est un package
Les plugins, modules, composants, modèles sont tous types d'extensions.
Donc, si j'ai raison, les modules, plugins et composants ont les mêmes versions. Est-ce aussi vrai?
Non, ils sont tous séparés, ils utiliseront donc des versions différentes.
Mais comment connaître la version des extensions s'il n'y a pas un tel enregistrement?
Dans votre backend Joomla (panneau d'administration), accédez à Extensions >> Manage >> Gérer .
Cela vous donnera une liste de toutes les extensions installées et leur version respective.
Voici un exemple:
* Update * J'ai posté cette réponse, puis j'ai vérifié les réponses par Sharky et plus tard, Neil Roberts, disant que les fichiers .xml étaient disponibles. J'ai testé cela sur l'un de mes sites, j'ai donc été très surpris que cette information soit disponible et je vais devoir faire quelque chose à ce sujet. J'ai laissé ma réponse d'origine ici à titre de référence générale et j'ai voté pour les réponses des autres en disant: recherchez le fichier XML manifeste dans les répertoires des composants.
Ces informations ne sont pas disponibles pour un utilisateur final ou un visiteur d'un site Web.
Vous aurez besoin soit d'un accès administrateur au back-end de Joomla, soit d'un accès pour exécuter une requête de base de données et à moins que vous n'ayez piraté le site, vous n'en aurez pas non plus.
En tant que spectateur public d'un site Web, vous ne pourrez voir que ce qui est disponible dans le code HTML affiché. Comme expliqué dans la réponse de Lodder, les extensions sont composées de plugins, de modules et de composants et, pour la plupart, elles se produisent du côté serveur pour créer les pages qui sont ensuite rendues et envoyées à votre navigateur.
Certains composants peuvent afficher un lien de retour ou du texte `` alimenté par ... '' dans le pied de page, c'est-à-dire par une action délibérée de leur part dans leur code, mais normalement les plugins et modules laisseront à peine toute trace d'eux-mêmes et encore moins leur version. Un plugin exécuté en profondeur dans le code de Joomla qui change une valeur de A en B ne va pas obtenir de crédits au bas d'une page, comme par exemple les personnes qui travaillent sur un film sont répertoriées à la fin.
Vous pouvez analyser le code HTML de chaque page d'un site Joomla et créer lentement un catalogue de chapitres prouvant qu'une extension peut ou non avoir contribué à la création d'une page, mais il n'y aurait pas d'informations de version fiables. Cela prendrait aussi longtemps que je suggérerais que vous n'ayez plus autant de respirations en vous.
Peut-être que si vous expliquez davantage les recherches que vous effectuez et quelles sont vos exigences, alors les gens ici pourraient suggérer une approche alternative.
Comme Sharky dit, si vous n'avez pas d'accès administrateur à la base de données, la meilleure façon de trouver ces informations est à partir des fichiers accessibles au public sur le site Web tels que les fichiers manifest xml. La sécurité sur certains sites Web ne vous permet pas d'afficher ces fichiers, cette méthode n'est donc pas toujours fiable.
Même lorsque vous avez accès aux fichiers manifestes, toutes les versions d'une extension n'utilisent pas le même fichier manifeste.
Pour quelques exemples, voir le code ci-dessous où Akeeba Backup et JCE Editor utilisent le même fichier manifeste pour toutes les versions, mais pour ChronoForms et Gantry Framework, vous devez vérifier plusieurs fichiers pour obtenir le numéro de version.
// Display Akeeba Version
echo "<div class='item'>Akeeba Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_akeeba/akeeba.xml");
if (isset($xml->version)) {
echo "<div class='column'>$xml->version</div>";
} else {
echo "<div class='column'>Unknown</div>";
}
// Display JCE Version
echo "<div class='item'>JCE Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_jce/jce.xml");
if (isset($xml->version)) {
echo "<div class='column'>$xml->version</div>";
} else {
echo "<div class='column'>Unknown</div>";
}
// Display ChronoForms Version
echo "<div class='item'>ChronoForms Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms6/chronoforms6.xml");
if (isset($xml->version)) {
//ChronoForms v6
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms5/chronoforms5.xml");
if (isset($xml->version)) {
//ChronoForms v5
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronoforms/chronoforms.xml");
if (isset($xml->version)) {
//ChronoForms v4
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_chronocontact/chronocontact.xml");
if (isset($xml->version)) {
//ChronoForms v3
echo "<div class='column'>$xml->version</div>";
} else {
//Unknown
echo "<div class='column'>Unknown</div>";
}
}
}
}
// Display Gantry Version
echo "<div class='item'>Gantry Version:</div>";
$xml = simplexml_load_file($website . "/administrator/components/com_gantry5/gantry5.xml");
if (isset($xml->version)) {
//Gantry v5
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_gantry/gantry.xml");
if (isset($xml->version)) {
//Gantry v4
echo "<div class='column'>$xml->version</div>";
} else {
$xml = simplexml_load_file($website . "/administrator/components/com_gantry/manifest.xml");
if (isset($xml->version)) {
//Gantry v3
echo "<div class='column'>$xml->version</div>";
} else {
//Unknown
echo "<div class='column'>Unknown</div>";
}
}
}