CitizenZ

Blog Libre, Geek & Crypto

BBClone : les stats faciles pour son site web

Rédigé par citizenz 6 commentaires
Il est souvent pratique et utile d'avoir une idée de la fréquentation de son site web. Soit par simple curiosité, soit pour en apprendre un peu plus sur le public qui visite le site, son "origine" (géographique ou referer), quelles pages ont le plus été visitées, etc.

Il existe bon nombre de scripts pour mettre en place des statistiques pour son site.
J'ai personnellement toujours privilégié l'aspect visuel et pratique ... voire simple(iste ?). Et cela fait des années que j'utilise BBClone .

BBclone est un compteur web écrit en PHP qui donne une vue détaillée des visiteurs de votre site web en affichant les n derniers utilisateurs (et les données qu'ils ont fournies, comme leur IP, navigateur, etc.) : très pratique pour les webmasters qui veulent voir qui visite ses sites, ce que les navigateurs utilisent, d'où ils proviennent !
Pour chaque visiteur, BBClone peut afficher : adresse IP, le nom d’hôte, l'OS, le navigateur, l'URL d'origine (referer), l'heure de la visite, la page visitée, etc .

Relativement simple à mettre en place, vous pouvez en avoir un aperçu ici : https://bbclone.de/demo /

Le guide d'installation  est très bien fait mais en anglais, aussi voici un court résumé de la démarche d'installation.

1 - Téléchargez BBClone à cette adresse : http://bbclone.de/download.php
2 - Uploadez le répertoire complet BBClone sur votre serveur... Un bon endroit pour mettre BBClone reste à la racine de votre site ce qui donnera : http://www.example.com/bbclone/
3 - Donnez les bons droits aux fichiers. Tous les fichiers "importants" se trouvent dans le répertoire var/. Aussi donnez les droits 666 (chmod 666) aux fichiers suivants : counter[0-15].inc, access.php, last.php et .htalock
4 - Fichier de conf : dans le répertoire conf/ vous trouverez le fichier de config de BBClone (config.php). Peu de choses à faire si ce n'est changer la langue par défaut (mettez fr pour le français) et la ligne $BBC_DETAILED_STAT_FIELDS où vous pouvez ordonner les colonnes qui seront affichées et ajouter ou enlever des colonnes. Moi j'ai choisi cette présentation : $BBC_DETAILED_STAT_FIELDS = "id, time, ext, ip, dns, visits, os, browser, page, search, referer";
5 - Activiez l'option de debug : $BBC_DEBUG = 1; ... cela peut-être utilise si vous avez une erreur...
6 - Ajoutez le code d'activation sur toutes vos pages.

La partie 6 est la partie la plus "compliquée". Vous devez ajouter un code pour toutes les pages que vous souhaitez "monitorer". Il va falloir indiquer le bon PATH et le bon endroit pour mettre ce code. Si vous ne voulez pas indiquer le code à la main sur chaque page, deux solutions s'offrent à vous :
- soit utiliser un fichier .htaccess si vous utiliser un serveur Apache ou configurer votre fichier vhost avec un serveur Nginx
- soit inclure un fichier .php (que nous pouvons nommer bbclone.php) dans le header.php de votre thème, par exemple...

J'ai choisi la deuxième solution. Voici mon fichier bbclone.php placé à la racine du site :
[MAJ : 16/08/17, 21h20] : le code suivant permet l'affiche du nom complet des pages visitées
<?php
$url = $_SERVER['REQUEST_URI'];
define("_BBC_PAGE_NAME", "$url");
define("_BBCLONE_DIR", "bbclone/");
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
?>

J'ai indiqué le chemin complet où se trouve le répertoire BBClone sur mon serveur. A changer chez vous en fonction de votre configuration.
Il ne me reste plus qu'à inclure ce fichier dans le header de mon thème pluXML : 
<?php include 'bbclone.php'; ?>


Que vous soyez propulsé par Apache ou Nginx, vous souhaiterez certainement protéger l'accès à ces statistiques à l'aide de votre fichier .htaccess (Apache) ou en configurant votre fichier de conf Nginx.

Voici un exemple pour Nginx :
## Protection répertoire BBClone
location /bbclone {
auth_basic "stats";
auth_basic_user_file "/etc/nginx/passwd/stats_passwd";
}
Il vous faut bien évidemment créer le fichier stats_passwd avec votre pseudo + un mot de passe à l'aide de l'utilitaire apache2-utils (sous Debian, Ubuntu, ...) en rentrant :
$ sudo htpasswd -c stats_passwd

Au final, voici un petit aperçu des stats fournies par BBClone en action sur mon site :





CitizenZ : Geek quadra nivernais
fan d'ovalie, de musique, de linuxeries et de Net !

6 commentaires

#1  - Da Scritch a dit :

« Donnez les droits 666 ». .... ?????? OUCH

Répondre
#2  - Da Scritch a dit :

OK, j'ai regardé un peu le code source. Mélange code et sortie, soit, code difficilement lisible et mal mis en forme, soit,.... mais ÇA en 2017, c'est inexcusable et hors de question de mettre en place sur un de mes serveurs :
show_views.php , ligne 62
«
if (_BBC_PHP < 410) global $HTTP_GET_VARS;
»
What can possibly go wrong ??????

Répondre
#3  - citizenz7 a dit :

@Da Scritch : pour le commun des mortels dont je fais partie, peux-tu nous expliquer pourquoi c'est "inexcusable" ? Merci d'avance.

Répondre
#4  - Da Scritch a dit :

Commençons par la conditionnelle. Pourquoi "410" ? Nous avons une valeur "magique", qui pourrait apparaître ailleurs dans le code. Les conventions de base, notamment pour permettre les refactos recommandent d'éviter les valeurs magiques en milieu de code, et de les déclarer à part. Soit en constantes, soit, mieux, dans un namespace explicitant leur rôle.

Ensuite, les accolades de blocs qui sont certes facultatives, mais dont la présence est franchement utile, notamment pour indenter le code, ce qui donne une réelle rapidité à la relecture.

"$HTTP_GET_VARS" est obsolète depuis PHP 4.1, et devrait être prochainement retiré dans PHP 7. Sa présence démontre un code qui n'a pas été sérieusement remis à jour et d'une sécurité vraiment pas garantie.
La meilleure preuve étant que les données GET et POST sont directement acceptées, sans aucune vérifications, par exemple via filter_vars() . Nous avons de forts risques en termes de sécurité en injection de code.

Quant à l'usage assez libératoire de "global", il montre un couplage fort, mais aussi le manque de cloisonnement de responsabilités. Ce qui donnera à terme un code difficilement testable, auditable et donc sécurisable.

Je suis peut être moyennement clair, est-ce que ces explications vous suffisent ?

Répondre
#5  - citizenz7 a dit :

Merci pour ces précisions. Il est donc clair que cette application, non mise à jour depuis fin 2015, présente certains risques de sécurité et que le code à "mal vieilli".

Répondre
#6  - CryptoHow a dit :

Pas mal comme script, j'adore ce genre de solution légères !

Répondre

Écrire un commentaire

 Se rappeler de moi sur ce site
Quelle est la troisième lettre du mot vpxg ?

Fil RSS des commentaires de cet article