PHP/JAVASCRIPT - SURVEILLANCE DU TRAFIC

Hakumbaya Messages postés 41 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 17 décembre 2010 - 14 oct. 2010 à 01:06
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009 - 22 oct. 2012 à 08:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52373-php-javascript-surveillance-du-trafic

cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
22 oct. 2012 à 08:35
Bonjour,

Désolé si certains de mes commentaires semblaient "stérile", et peut etre que je me suis mal expliquée.

Le but du 1er commentaire était d'essayer de questionner sur le fond du problème, et c'était bien précisé en bas du message(pour rappel, le script est présenté comme niveau "initié", parle de "SEO négatif" et indique combler les manques de "Google Analytics" et de "Yahoo").
Mais ok, je concède que j'ai c'était tranchant. mea culpa.

Juste pour justifier un peu (donc sur le fond du script présenté), ce script ne pourra pas avoir l'intégralité des "referers", et ne donnera pas plus d'infos qu'avec Google Analytics (je ne parle pas de Webmaster tool).
Ce script (comme Google Analytics) ne donnera que les backlink qui seront utilisés par un internaute, c'est à dire sans le clic d'un internaute sur un lien pointant vers le site surveillé, aucun "referer" et donc aucune donnée enregistrée... Et malheureusement le problème avec les liens depuis des pages "pourries", c'est que personne ne les visite mis à part les robots d'indexation.

Pour le 2nd commentaire, c'était en réponse à un commentaire technique sur le SEO négatif/positif. J'ai voulu couper court parcequ'il n'y a pas une seule vérité sur ces éléments, chacun à la sienne et le débat peut durer des pages et des pages.

Reste le 3eme commentaires qui, il est vrai, aurait du être le premier commentaire, mais pour lequel par contre l'auteur n'a donné aucune suite...
Mais je répète ce que j'ai déjà dit sur ce script :

- il y a des problèmes de sécurité dans la requête SQL dans le script de collecte :
>>>>> pas de sécurisation des valeurs dans la requête SQL (collector.php)

- il y a des problèmes de performance dans le script collecte :
>>>>> multiples boucles avec while et substr (collector.php)

- une erreur de conception du script :
>>>>> le script essaye de créer la base à chaque appel (collector.php)

- une autre erreur de conception du script php:
>>>>> le script rempli la base de données : 1 ligne pour 1 visite avec variable fournie par l'utilisateur. Si on ne traite pas ça peut surcharger un base de données en quelques mois. Une personne mal intentionnée pourrait aussi remplir la base en appelant le script de collecte directement, juste en changeant le paramètre "v" (collector.php)

Autres problèmes après relecture de son code :

- un problème de présentation du code :
>>>>> le script JS est "complexifié(obuscation)", ce qui n'est pas la présentation qu'on pourrait attendre sur un site de partage comme PhpCS. Cela rend difficile la compréhension du système (supervisor.js)

- un problème d'organisation générale :
>>>>> Le navigateur doit charger le fichier javascript JS qui appelle un fichier "ip.php" pour récupérer l'ip puis appelle le fichier de collecte. Cela fait 3 appels alors que 2 seraient largement suffisant (le fichier IP ne sert à rien, il pourrait être inclus dans le script de collecte).

Dans l'état actuel du code, il vaut mieux préconiser aux utilisateurs de PhpCS de ne pas utiliser ce script, tant que les problèmes SQL et de fonctionnement ne sont pas corrigés, et de se tourner vers des solutions comme Google Analytics.

Bonne continuation,

EM.
soliste69 Messages postés 3 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 20 octobre 2012
20 oct. 2012 à 09:15
Bonjour,
C'est vraiment dommage de perdre son temps à lire des commentaires sans intérêt comme celui d'emilia123.
Moi je suis arrivé sur ce port en tapant la requête '"script php" recuperer totalite backlink' et je suis bien content de voir qu'il existe une personne qui partage sa solution.
Le pb de "link:", "webmaster tools" et tous les logiciels de recup de backlink, c'est qu'ils ne donnent pas la totalité des backlinks.
Et actuellement touché par "pingouin" sur un site de plus de 700 000 backlinks, cela me serait utile de tous les avoir.
Et ce script peut peut-être m'aider à atteindre cet objectif et si c'est pas le cas j'aurais eu connaissance de la directive "auto_prepend" que masternico a cru bon de partager dans un commentaire CONSTRUCTIF.
Mon commentaire porte sur l'attitude de beaucoup trop de monde a descendre dans des commentaires stériles (sauf le dernier d'EMILIA123 qui aurait du arriver en 1er ;) la participation de personnes qui prennent le temps de déposer une source sur un site de partage.

Bon maintenant je regarde cette source tranquillement...
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
19 oct. 2010 à 19:08
Ps : désolé pour lauretograf, j'ai écris rapidement et j'ai pas relu... c'est blindé de fautes...
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
19 oct. 2010 à 19:06
bonjour Masternico,

En fait avec mon commentaire "dummy number one" j'ai voulu taquiner un peu Hakumbaya..
J'étais déçu par ce script, alors que tout semblait interessant.
Ca attaque par un titre sur un thème vraiment interessant : le SEO.
Le niveau du script est en "initié" ce qui promet un code interessant.
Ca continue en donnant un peu l'eau à la bouche en parlant de SEO negatif, avec un description interessant..
Ca enchaine sur le fait que Google et Yahoo ont des fonctions manquantes (sous entendu ce script va combler tout ca).

Je m'attendais donc à un script interessant techniquement, qui comble un manque, sur un theme aussi interessant...

Mais ca se termine sur un script qui insère simplement 1 ligne dans la base de donnée pour chaque visite (enfin visiteur, date, etc, on va pas jouer sur les mots :p ), des requetes qui vont échouer à chaque fois (la création de la table lancée à chaque fois), aucune gestion d'erreur des requetes justement, et du découpage de texte à base de while...

Mon premier commentaire était juste pour eviter certaines idées reçues rapide. Je croise des "pro du référencement" depuis une 10aine d'années, alors j'en ai vu des vertes et des pas mures comme on dit..

La réponse de Hakumbaya a été très technique (je l'ai surement cherché :p) et je voulais y couper court en jouant la débutante en répondant par "dummy 1.0". Le référencement peut générer des débats qui partent dans tous les sens, et sans vraiment de vérité absolue... chacun à sa vérité.. qu'elle soit bonne ou pas :p
Donc j'ai évité le sujet et parlé uniquement du script (dont le but n'est pas évident à trouver) et de sa remarque sur le fait qu'il ne diffusera pas son taf (c'est compréhensible, mais tant qu'à faire autant qu'il n'en parle pas ici, c'est un réseau d'échange).

donc voila pourquoi je suis un peu rentrer dedans, désolé si ca a été mal pris...

Donc pour etre plus constructif il faudrait:
- déplacer la création de la base dans le script index.php
- ajouter la gestion des erreurs pour tes requetes SQL
- utiliser des expressions régulières pour découper l'url de départ
- corriger les problèmes d'injection SQL qui sont présents dans tes requetes.
- trouver un moyen de générer un historique des données
> ex tous les mois faire un groupby des referers (si vraiment c'est juste ce chiffre qui t'interesse), transférer le résultat dans une table "historique", et vider la table, au moins les insertions client seront effectuées sur une table presque vide.

Autrement, j'ai déjà utilisé auto_prepend_file, justement pour des essais de stats via php, et c'est pas mal, ca évite d'avoir à retoucher tous les scripts php.

bon sinon, bonne continuation (avec ton script gratuit, comme celui qui sera pas gratuit).

EM.
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
19 oct. 2010 à 14:12
Pour régler le problème d'intégration, il existe une directive dans le php.ini qui permet d'inclure automatiquement un fichier avant le chargement de tout script php: auto_prepend (de mémoire). Ce qui fait qu'en ne modifiant aucune page de ton site, tu peux y greffer ton système.

Voici le snippet de ce que j'utilise pour mon site:
/***************************/
// gestion du compteur de visite
/**************************/
$visites = new db_access();
$visites->close_connection = FALSE;
$visites->connect();
$query 'SET time_zone \'' . TIME_ZONE . '\'';
$visites->query($query);
$query = 'INSERT INTO `visites` (`visites_ip`,`visites_http_referer`,`visites_user_agent`,`visites_time`) VALUES (\'' . $_SERVER['REMOTE_ADDR'] . '\',\'' . $visites->escape_string(@$_SERVER['HTTP_REFERER']) . '\',\'' . $visites->escape_string(@$_SERVER['HTTP_USER_AGENT']) . '\',NOW())';
$id_visites = $visites->insert($query);

$query = 'INSERT INTO `visites_2_pages` (`id_visites`,`id_pages`) VALUES (\'' . $id_visites . '\',\'' . $pages->id_pages . '\')';
$visites->insert($query);

// d'abords on regarde si le user_agent est connu de nos services
$query 'SELECT * FROM `robots` WHERE `robots_user_agent` \'' . $visites->escape_string(@$_SERVER['HTTP_USER_AGENT']) . '\'';
$visites->select($query);
//echo $query;
if($visites->nb_rows == 0)
{
// le visiteur n'est pas un robot, on met en place la relation sessions=>visites
$query = 'INSERT INTO `sessions_2_visites` (`id_sessions`,`id_visites`) VALUES (\'' . $session->id_sessions . '\',\'' . $id_visites . '\')';
//trigger_error('//Visitor: ' . $query,E_USER_WARNING);
$visites->insert($query);
}
else
{
//le visiteur est un robot, on met en place la relation robots=>visites
$query = 'INSERT INTO `robots_2_visites` (`id_robots`,`id_visites`) VALUES (\'' . $visites->result_query[0]['id_robots'] . '\',\'' . $id_visites . '\')';
//trigger_error('//Robot: ' . $query,E_USER_WARNING);
$visites->insert($query);
}

===================================

Et pour la gestion des robots, j'utilise un script que j'ai trouvé sur commentcamarche qui consite à créer un répertoire robots.txt dans lequel tu place un fichier index.php qui stocke les infos des robots qui viennent frapper à la porte:

$robots = new db_access();
$robots->close_connection = FALSE;
$robots->connect();
$query 'SET time_zone \'' . TIME_ZONE . '\'';
$robots->query($query);
$query 'SELECT * FROM `robots` WHERE `robots_user_agent` \'' . $robots->escape_string($_SERVER['HTTP_USER_AGENT']) . '\'';
$robots->select($query);
//echo $query;
if($robots->nb_rows == 0)
{
// le robot est encore inconnu de nos service, on le log
$query = 'INSERT INTO `robots` (`robots_ip`,`robots_user_agent`,`robots_last_time_seen`) VALUES (\'' . $_SERVER['REMOTE_ADDR'] . '\',\'' . $robots->escape_string($_SERVER['HTTP_USER_AGENT']) . '\',NOW())';
$robots->insert($query);
}
else
{
// c'est bien le même robot. On met à jour la date de dernier passage
$query 'UPDATE `robots` SET `robots_last_time_seen` NOW() WHERE `id_robots` = \'' . $robots->result_query[0]['id_robots'] . '\'';
$robots->update($query);
}
Hakumbaya Messages postés 41 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 17 décembre 2010
19 oct. 2010 à 11:12
Je suis tout à fait d'accord avec toi masternico, une bonne capture doit évidement se faire en PHP, le petit problème que j'ai rencontré est de rendre très facile l'intégration du système de capture dans n'importe quel site, effectivement, les entrées peut se faire faire un simple "include", mais les interactions PHP sont bien plus problématiques que les conflits entre 2 script javascript.

Mais si quelqu'un à une bonne idée, je suis ouvert à toute proposition pour proposer une autre version plus soigné et proposée sous forme de solution PHP !
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011
19 oct. 2010 à 11:07
Emilia123=> Non, c'est vrais, il y a aussi le sexe (c'est juste que c'est de l'autre coté... :P)

Par contre, pour le reste, je ne comprends pas tes commentaires. Dans le premier, tu sembles très sûre de toi en utilisant des termes apropriés et en argumentant ton points de vue, puis dans le deuxième, tu prétends n'en être qu'à 'dummy number one'??? Ce n'est pas très cohérent.

Ensuite, pour abonder dans ton sens, je n'aime pas trop les traitements analytics en javascript. Partant du prinicipe qu'il suffit que l'internaute le désactive et le script ne fonctionne plus, je ne cautionne pas.

Il vaut mieux partir sur une solution php (coté serveur) ainsi, le client ne peut pas faire grand chose à part modifier quelques valeurs qui lui sont accéssibles.

Et comme de toutes façons, si un site a un gros traffic, il faut nécessairement que le serveur ait les reins solides, ça veut donc dire que quelques millions de lignes dans une table ne lui feront pas peur.
Hakumbaya Messages postés 41 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 17 décembre 2010
19 oct. 2010 à 10:51
"Moi ce que je comprend toujours pas, c'est l'utilité d'un tel script. tu attaques en
disant que ca comblera les manques de GA ou de Yahoo, "

Le seul objectif de cette source est de faire une trace des sites pointant vers le site surveillé et rien de plus, car c'est un élément clé pour avoir un bonne maitrise de son référencement.

"mais la il n'y a rien de plus, et beaucoup de moins par rapport à un vrai outil de stat
(type GA ou Yahoo)."

Je reprendrai la conclusion de ma source : "Il est possible à partir de ce script"
Ça ne signifie pas qu'il ne fait, seulement qu'il est possible de dévier l'utilisation première de l'outil pour autre chose, et c'est pour cela que mon premier commentaire est un script éventuellement complémentaire pour la GeoIP.

"Autant ne pas nous parler de l'autre version alors"

Je n'en ai pas parlé jusqu'à maintenant, et oui je dispose d'un projet fini beaucoup plus complet mais que je ne souhaite pas diffuser etant donné le travail effectué dessus, n'importe quel programmeur de metier se reconnaitra dans ces mots ^^. Par contre j'ai bien precisé a la fin de la conclusion de ma source :
"Éventuellement dans une prochaine version si cela intéresse un temps soit peu quelqu'un"
Autrement dis, si cet outil intéresse qui que ce soit, je peux fourni ponctuellement des versions un peu plus complètes et un peu plus de conseils aux programmeurs désirant compléter ce script pour faire du trade, ou des script de référencement.

"Par rapport au script en lui même, je le trouve problématique car si on ne vide pas la
base fréquemment, elle va grossir (1 ligne par visiteur par jour c'est tout simplement
pas concevable pour des sites à fort trafic) ."

En soi la base n'a jamais à être vidée puisque son but est de conserver tous les BL. Mais effectivement, il n'y a aucun script d'archivage ^^. Comme toute les sources que je diffuse, ce n'est qu'un extrait de code source représentant l'utilisation de technique et de technologie dans leur contexte. Je suis sur codes sources pour partager un savoir faire, pas pour donner des applications toutes faite, ca n'a aucun intérêt pour progresser !

"Derniere question, quel est le critère qui fait que la source est en initié?"

La source est initié juste pour l'utilisation d'Ajax, (le tronçon de code javascript qui récupère l'ip du visiteur via Ajax, et celui qui pose le cookie avec la réponse Ajax de l'appelle enregistrant le trafic => cookie : tracker du visiteur) qui ne m'a pas apparus simple appréhension.
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
18 oct. 2010 à 23:11
bonsoir

"Tout bon referenceur sait,..."
Ha moi ca je connais pas, j'ai commencé l'internet la semaine derniere, j'en suis au livre "l'internet 1.0 for dummy", le seo-negative ca sera pour plus tard...

Moi ce que je comprend toujours pas, c'est l'utilité d'un tel script. tu attaques en disant que ca comblera les manques de GA ou de Yahoo, mais la il n'y a rien de plus, et beaucoup de moins par rapport à un vrai outil de stat (type GA ou Yahoo).

"Tu comprendra bien que je diffuserai pas gratuitement un script plus riche en tracking et information"
ha.. heuu... bin non :)
c'est vrai que tout le travail magnifique de l'open source est gratuit mais que tous les devs gardent pour eux une autre version, bien meilleure, qu'ils vendent sous le mantaux... Autant ne pas nous parler de l'autre version alors.

Par rapport au script en lui meme, je le trouve problématique car si on ne vide pas la base frequemment, elle va grossir (1 ligne par visiteur par jour c'est tout simplement pas concevable pour des sites à fort trafic) .

Derniere question, quel est le critère qui fait que la source est en initié?

Aller... une petite conclusion... il n'y a pas le cul dans la vie :D

EM
Hakumbaya Messages postés 41 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 17 décembre 2010
18 oct. 2010 à 16:13
emilia123,

Réponse pour le 1) :
Ce script à pour but de collecter la totalité des referer pointant vers le site sous surveillance. Tout bon referenceur sait, même si ca ne fait pas tout que le backlink, c'est le nerf de la guerre, et que seuls quelques backlink provenant de linklist sous des domaines radicalement differents peut faire prendre ou perdre 1 à 2 place sur google. Or seules les 3 premières place sur ce dernier son reconnue comme rémunératrice à coup sur, donc non, un mauvaise BL ne brise pas un referencement, mais oui un mauvais BL peut serieusement toucher la monetisation d'un site, surtout si ses mauvais BL attaque l'index et les pages nichées.

Réponse pour le 2) :

"tu parles de ne pas faire comme "google analytics", mais tu n'auras aucune information de plus que 'google analytics'" J'ai bien précise qu'il y avait possibilité de faire évoluer le script vers une structure tel qu'un ATCore utilisé habituelle pour du trade, mais qui peut très biens servir d'outil de stats avec les informations équivalentes d'un google analytics, mais ce script n'en a pas la prétention, je le dis clairement ^^. Tu comprendra bien que je diffuserai pas gratuitement un script plus riche en tracking et information.

"les bots n'interprètent - la plus part du temps - pas le javascript, donc pas ton script supervisor.js, donc pas de stats sur les bots"
La aussi, erreur ! Google dispose de plus d'un bot, dont des bots navigateurs de contrôle anti-clustering qui interpretent très bien le javascript ^^

"Enfin, quel est le problème de se "protéger" d'une page en "no-index" qui, normalement, ne sera pas présent dans les résultats des moteurs de recherche (justement du fait du "no-index"
Le fait qu'un BL ne soit pas référence signifie qu'il n'induit d'héritage de PR, mais cela influe tout de même sur le référencement, car est pris en compte le taux de rebond et le temps de connexion d'un visiteur sur une page (stats disponible sur Alexia) qui influent sur le référencement (vrai pour google, moins vrai pour yahoo). Plus les visiteurs fermeront rapidement la page sans un seul clic sortant, et plus la page perdra de poids referentiel.

Bien entendu le référencement ne se joue pas à ca, mais je n'ai trouvé jusqu'à présent aucun outil permettant d'installer sur son site avec des modifications mineurs un tracker de référer javascript, et j'ai donc pensé intéressant de partager cela, et de laisser à chacun se programmer comme il l'entend les filtres et interprétations des informations brutes comme chacun l'entend.

Pour ce qui est de la situation m'ayant donné envie de partager cette source, je travaille depuis plus de 18 mois dans l'une des plus grosses structure de diffusion de X online, milieu qui, mise à part la rencontre et le jeu d'argent en ligne, doit bien avoir entre 3 à 5 ans d'avance d'analyse référentielle sur la plupart des marché upsell, et par conséquent une fréquence d'utilisation de SEO négatif bien plus importante : il est plus facile de plomber les concurrent que d'affiner son référencement.

Je suis d'accord, le SEO s'etend bien plus loin que le backlinking desindexé, il existe également de nombreux scripts de PR scupting javascript ou même flash (javascript masqué dans un flash), content spinning...et bien d'autres, mais il est bien plus difficile d'automatiser leur détection.

Pour conclure, ce script est adressé aux webmaster à des volumes assez importants, principalement aux traders ayant de bonnes connaissances et développement, qui ne peuvent se permettre d'avoir des script trop lourd sur des structures du type (Exemple du X, mais modèle fréquent dans tout les milieux) TGP, TopListe, Dump, Auto-submitters, Site de raccourcissement d'url, et StreamBiz. Il est bien évidents que des sites avec une faible monétisation et un trafic modéré, même avec un excellent référencement, n'a statistiquement aucune chance d'être la cible de SEO négatif ^^.

Tu trouvera ici quelques bases sur le SEO négatif qui se sont bien confirmé, et les techniques pour y être bien moins sensible.
http://www.theblackmelvyn.com/
cs_emilia123 Messages postés 122 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 5 janvier 2009
18 oct. 2010 à 07:51
bonjour,

Je ne suis pas tout à fait d'accord ce qui est dit ici..
1) pour ce qui du SEO negatif, avec la génération des liens bizarre, il n'y a souvent pas besoin de site extérieur pour faire des liens mal formaté:
ex : appel de la page d'index comme "/" ou "/index.php", ou "/index.php?lan=fr" sur un meme site, ne sont pas très bon (plusieurs URL, mais toujours le meme contenu), mais c'est pas pour autant qu'on ne retrouve plus aucune page d'accueil sur google. Il faut arreter de croire que le fait de faire un simple lien vers un site va permettre de détruire le référencement d'un site. On a changé de siecle il y a longtemps.

2) tu parles de ne pas faire comme "google analytics", mais tu n'auras aucune information de plus que "google analytics" (GA). tu confonds plusieurs choses semble t il....
ex 1: tu parles du passage des bots non fourni par GA, mais ton script ne donnera pas plus (les bots n'interprètent - la plus part du temps - pas le javascript, donc pas ton script supervisor.js, donc pas de stats sur les bots)
ex 2: donc si on ne parle pas de bots, on peut par contre parler des internautes, mais dans ce cas là ton script fournira exactement les memes infos que "GA", à savoir aussi le referer, et ceci meme si la page d'origine est en "no-index" (le no-index n'a aucun effet sur les navigateur et donc sur l'information referer visible dans GA).
ex 3: Enfin, quel est le problème de se "proteger" d'une page en "no-index" qui, normalement, ne sera pas présent dans les résultats des moteurs de recherche (justement du fait du "no-index").

Bref, je pense que meme si tu as été victime d'une situation qui t'a semblé claire, il a du y avoir d'autres éléments qui sont rentrés en jeu..
Pour faire simple, si il suffisait de faire un lien mal formé pour faire disparaitre un site, il n'y aurait plus rien sur google.

Donc, ca c'était juste pour la partie "justification du script" rien à voir avec des commentaires sur le script en lui meme que je n'ai pas encore regardé.

EM.
Hakumbaya Messages postés 41 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 17 décembre 2010
14 oct. 2010 à 01:06
Voila un script complémentaire pour ceux qui veulent connaitre le pays, la ville la latitude et la longitude d'origine du visiteur !
http://www.phpcs.com/codes/GEOIP-AVEC-MAXMIND-LOCALISER-VISITEUR_52379.aspx
Rejoignez-nous