Jump to content

Erreur 404 relatée dans Google WebmasterTools


Recommended Posts

  • 3 months later...

Bonjour

Je réponds à ce post car j'ai pas mal cherché sur le forum la cause de ces 404.
Peut-être que ce début de solution pourra aider...


Le problème vient du module statsdata et concerne le code suivant (si ce module
est activé) :

[removed]
           var time_start;
           $(window).load(
               function() {
                   time_start = new Date();
               }
           );
           $(window).unload(
               function() {
                   var time_end = new Date();
                   var pagetime = new Object;
                   pagetime.type = "pagetime";
                   pagetime.token = "BarLpDDRssI=wMWE7WRXfhY=YipPvIhjAcY=E1TjZN+lVFk=";
                   pagetime.time = time_end-time_start;
                   $.post("http://www.allobambin.com/statistics.php", pagetime);
               }
           );
       [removed]




Le pagetime.token est valorisé avec le résultat du cryptage blowfish prenant en
paramètre entre autre l'identifiant de la page. Il s'avère que pour certains
paramètres, le blowfish retourne une chaîne contenant un '/'. Du coup, dans le
code javascript généré, on se retrouve avec quelque chose du genre
pagetime.token = "vqG9o/AaGU=LUM0dH4Gd1Y=qdrWuMcW2MY=L8jQuOnAmqw=" par exemple.


L'id_page joue un rôle prépondérant dans l'algo du blowfish car ce sont toujours
les mêmes pages qui génèrent un token avec '/'. Et bien évidemment, plus le nombre
de produits augmente, plus les risques de token avec '/' augmentent également.


Après quelques recherches rapides, je n'ai pas poussé plus loin, googlebot
analyse ce token contenant un '/' comme une url. A cause du '/', il analyse cela
comme un chemin sur le site.


J'avoue quelques lacunes dans les fonctions php à utiliser pour encoder le token
de façon à ce qu'il ne soit pas interprété comme une url lorsqu'il contient un
'/', j'ai tenté le urlencode suivi de urldecode mais cela n'a rien changé quant
à l'interprétation de googlebot => 404 en constante progression.


Je suis monté à une petite centaine d'erreur 404 Not Found dans le google webmaster.
Plus de temps à perdre donc, j'ai mis en place malgré moi cette correction inélégante
mais qui a le mérite de fonctionner, le temps que lors d'un prochain merge prestashop,
je constate que la correction "propre" a été apportée ;o).


Dans modules/statsdata/statsdata.php, remplacer :

// Ajax request sending the time spend on the page
   $token = $blowfish->encrypt($tokenArray['id_connections'].'|'.$tokenArray['id_page'].'|'.$tokenArray['time_start']);


Par :

// Ajax request sending the time spend on the page
   $token = str_replace('/', 'UNE_CHAINE_QUI_N_A_AUCUNE_CHANCE_DE_FIGURER_DANS_LE_BLOWFISH', $blowfish->encrypt($tokenArray['id_connections'].'|'.$tokenArray['id_page'].'|'.$tokenArray['time_start']));



Et dans statistics.php, remplacer :

$blowfish = new Blowfish(_COOKIE_KEY_, _COOKIE_IV_);
$token = $blowfish->decrypt($_POST['token']);



Par :

$blowfish = new Blowfish(_COOKIE_KEY_, _COOKIE_IV_);
$token = str_replace('UNE_CHAINE_QUI_N_A_AUCUNE_CHANCE_DE_FIGURER_DANS_LE_BLOWFISH', '/', $blowfish->decrypt($_POST['token']));




Ensuite, il ne reste plus qu'à récupérer les 404 dans le google webmaster et de les insérer dans le .htaccess sous la forme :
Redirect 410 /vqG9o/AaGU=KDa5HzzUirA=bWn1DKsKASo=5nSVjozkppk=

La diminution du nombre de 404 a été spectaculaire en ce qui me concerne.


Johan

Link to comment
Share on other sites

Bonjour :)

Je n'avais jamais pensé à ca et tu doit surement avoir raison!

Selon moi pour que le token soit pris pour un lien par google, il faut même que ce soit le premier caractère qui soit un /

En revanche ta solution me fait un peu peur car tu modifie le token et donc j'imagine que celui ne sera pas correctement "décodé", ou peut être que si, mais encore faut t'il trouver le caractère qui n'as aucune chance d'être utilisé par le blowfish?

J'ai donc pensé a une autre solution! Tu me dira ce que tu en penses... En revanche je l'applique dès ce soir donc attention à vos risque et péril si vous souhaitez la tester dès maintenant sans mon retour d'expérience...

je n'expliquerai pas en détails mais juste le principe, et si ca fonctionne je détailerai pour en faire profiter les autres.

en fait je rajoute /stats/ devant les 2 token dans statsdata.php, puis je fait un str_replace de "/stats/" à "" dans statistique.php juste avant de le décoder.

Je vais maintenant dans mon robots.txt et j'ajoute "Disallow: /stats/"

Donc maintenant à tout les coup mon token est pris comme un lien par google, mais je dit dans mon robots.txt de ne pas suivre ce lien...

Link to comment
Share on other sites

Bonjour

Oulah !! N'importe quoi moi !

Grosse erreur dans mon post, merci pour ton message qui me fait prendre
conscience de cela.

Dans statistics.php, il faut bien sûr appliquer le str_replace sur la variable postée token avant de
l'envoyer au blowfish soit

$token = $blowfish->decrypt(str_replace('UNE_CHAINE_QUI_N_A_AUCUNE_CHANCE_DE_FIGURER_DANS_LE_BLOWFISH', '/', $_POST['token']));



Et SURTOUT pas :

$token = str_replace('UNE_CHAINE_QUI_N_A_AUCUNE_CHANCE_DE_FIGURER_DANS_LE_BLOWFISH', '/', $blowfish->decrypt($_POST['token']));



L'encodage se fait après le blowfish tandis que le décodage se fait avant.
A priori, pas de soucis même si le token est modifié car il est remis d'équerre juste avant son traitement dans statistics.php.

Comme chaîne, j'ai mis ALLO, peu de chances que le blowfish renvoie ça et au pire si quelque chose ne fonctionne pas, ce sont des stats de perdues, moins préjudiciables que des 404 je pense.

Pour l'analyse de google, je pensais aussi qu'il fallait que le token commence par un '/' mais en suivant les liens indiqués dans le google webmaster (au bout d'un certain temps car le token varie en fonction d'autres paramètres que l'id_page) j'ai pu constater qu'un token avec un '/' en plein milieu provoquait aussi un 404.

Astucieux la solution avec le robots.txt ;o).
Cela devrait fonctionner je pense.

Johan

Link to comment
Share on other sites

Finalement j'ai préférais opter pour ta solution en mettant la chaine AAAAAAAAAA, ainsi il ne devrai pas y avoir de problème :P

J'ai peur qu'en créant systématiquement un lien même avec un acces interdit dans mon robot ne soit pas la meilleur solution, ca fait tout de même un lien avec une erreur 404...

Bref en tout les cas merci d'avoir réglé ce "vieux" problème, car j'avous que vue le peu de réponse que j'avais eu à l'époque et ne trouvant pas la solution, j'avais mis de coté ce problème!

Link to comment
Share on other sites

Attention, il ne faut pas mettre une chaîne ne contenant que des caractères identiques !

C'est ce que j'avais fait machinalement au début :o).
J'avais mis "9999".

Le problème avec les "AAAA" c'est si tu as un token du style "0xlytrsd324A/fdffdg" c'est à dire un A avant le '/'
(ou plusieurs A consécutifs avant ou après).
Le premier str_replace fonctionnera car tu remplaceras bien le '/'.
Par contre, celui du statistics.php qui fait l'opération inverse sera erroné car il commencera à une position trop tôt.

Arf, et à coup sûr, il y a une fonction php qui existe pour protéger le token du googlebot...

Bonne journée.

Johan

Link to comment
Share on other sites

  • 1 month later...

Salut à vous

je n'avais jamais fait attention, mais il m'arrive d'avoir exactement le même problème, serait'il possible de nous décrypter tout cela pour que 'l’on puisse faire les modifications. ;-)

Merci beaucoup par avance.

bonne soirée

Link to comment
Share on other sites

Bonjour

En gros, pour solutionner temporairement ce problème (le temps que la version de base de prestashop intègre une solution), il suffit de remplacer 2 lignes de code dans 2 fichiers différents.

Je me base sur la version 1.3.1 pour les n° de ligne, c'est la dernière à ce jour il me semble.

Dans le fichier modules/statsdata/statsdata.php, repérer la ligne 80 :

 $token = $blowfish->encrypt($tokenArray['id_connections'].'|'.$tokenArray['id_page'].'|'.$tokenArray['time_start']);



La remplacer par :

$token = str_replace('/','STATS',$blowfish->encrypt($tokenArray['id_connections'].'|'.$tokenArray['id_page'].'|'.$tokenArray['time_start']));



Dans le fichier statistics.php, à la racine, repérer la ligne 19 :

$token = $blowfish->decrypt($_POST['token']);



La remplacer par :

$token = $blowfish->decrypt(str_replace('STATS', '/', $_POST['token']));



La chaîne "STATS" (choisie par Raph59) peut être remplacée par n'importe quoi du moment qu'il n'y a pas de "/" et que ce n'est pas une suite de caractères identiques. BOBY fonctionnerait très bien par exemple.

Ensuite, il faut renseigner le .htaccess avec les 404 Not found trouvés dans le Google Webmaster Tools comme je l'indiquais dans le post précédent.

Bonne journée.

Cordialement.
Johan

Link to comment
Share on other sites

Bonjour

merci beaucoup pour les explications.

J’avais fait cela, mais comme je n'en étais pas vraiment sur ça confirme bien ce que j'ai remplacé. d'ailleurs chaque jour j'avais une erreur de se type, aujourd'hui zéro :P
bonne soirée a vous
Yannick

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 months later...

Bonjour,
Tout d'abord un grand merci à vos interventions sans lesquelles les néophytes dont je fais partie seraient quelque peu voir plus perdu.
J'ai lu avec beaucoup d'intérêt vos interventions suite aux multiples 404 que google m'indique.
J'ai bien compris la procédure mis à part celle du fichier htacess.
Serait il possible d'avoir un exemple ? erreur google --> code fichier ?
Merci

Link to comment
Share on other sites

  • 2 weeks later...
Bonjour,
J'ai bien compris la procédure mis à part celle du fichier htacess.
Serait il possible d'avoir un exemple ? erreur google --> code fichier ?


Bonjour,

Voici un exemple : ton webmaster tool affiche une URL introuvable de type :
http://www.tonsite.com/HxWsRqibtW=VsCUy/EYfXM=5A9rOLyqanU=/1ttf7KOa7X=



Il se suffit alors de modifier ton htaccess en ajoutant chaque URL introuvable comme suit :

Redirect 410 /HxWsRqibtW=VsCUy/EYfXM=5A9rOLyqanU=/1ttf7KOa7X=
Redirect 410 /2èmeURL
...

Link to comment
Share on other sites

Salut,

Savez pourquoi certaine redirection me créer une erreur 500?
d'autre fonctionne toujours après la redirection.

et quand j'envoi mon paquet entier de redirection c'est a dire plus de 100 j'ai encore l'erreur 500.

Par contre quand je les rentres une à une nickel... (le .htaccess aime nous faire perdre du temps !!! )

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...