Jump to content

[TUTO adminCart.php ps1.3.1] Affichage de l'ip + bot


r.guillaume

Recommended Posts

MAJ: Correction des lignes non clicables. Si le parametre mylink est appliqué à la colonne, la celulle n'est pas clicable, sinon, elle renvoie sur le lien par defaut.

-ajout d'un lien "localiser" qui redirige sur la localisation de l'ip sur le site "localiser-ip.com"


Bonjour,

Suite à la création de panier incessante par des supposés BOT qui n'en ont rien à f.... du "robots.txt", j'ai édité plusieurs fichiers pour arriver à ce résultat:

Image d'apercu

Préambule:
L'enregistrement de l'adresse IP est interdite à condition de le notifier clairement à l'internaute et de déclarer cet enregistrement à la CNIL:

http://www.cnil.fr/vos-responsabilites/declarer-a-la-cnil/declarer-un-fichier/declaration/mon-secteur-dactivite/


Commençons:

Étant donné que nous supprimerons certaines portions de code, les lignes des tableaux du Back-office ne seront plus directement cliquables. Il faudra vous référer aux images d'actions à droite des tableaux. La vue et l'edition.

Etant donné que des modifications sont apportées au cœur de PS, notamment aux classes ==>
SAUVEGARDEZ VOS FICHIERS ORIGINAUX AINSI QUE LA BASE DE DONNEES. On est jamais trop prudent.

Modification de la base de données:
Ajouter un champs "ip_adress" de type varchar 30 dans la table "ps_cart" (par defaut)


Modification de la création d'un panier:

Dans ./classes/Cart.php

remplacer:

    protected    $fieldsValidate = array('id_address_delivery' => 'isUnsignedId', 'id_address_invoice' => 'isUnsignedId',
       'id_currency' => 'isUnsignedId', 'id_customer' => 'isUnsignedId', 'id_guest' => 'isUnsignedId', 'id_lang' => 'isUnsignedId',
       'id_carrier' => 'isUnsignedId', 'recyclable' => 'isBool', 'gift' => 'isBool', 'gift_message' => 'isMessage');



par:

    protected    $fieldsValidate = array('id_address_delivery' => 'isUnsignedId', 'id_address_invoice' => 'isUnsignedId',
       'id_currency' => 'isUnsignedId', 'id_customer' => 'isUnsignedId', 'id_guest' => 'isUnsignedId', 'id_lang' => 'isUnsignedId',
       'id_carrier' => 'isUnsignedId', 'recyclable' => 'isBool', 'gift' => 'isBool', 'gift_message' => 'isMessage', 'ip_adress' => 'isCleanHtml');//rajout de ip_adress => isCleanHtml



explication: Avant ajout dans la base de données, Ps valide les données. On lui indique notre variable ip_adress qui est "isCleanhtml" c'est à dire qu'elle ne contient pas de code html.

Toujours dans Cart.php:
Ajouter une ligne:

       $fields['id_address_delivery'] = intval($this->id_address_delivery);
       $fields['id_address_invoice'] = intval($this->id_address_invoice);
       $fields['id_currency'] = intval($this->id_currency);
       $fields['id_customer'] = intval($this->id_customer);
       $fields['id_guest'] = intval($this->id_guest);
       $fields['id_lang'] = intval($this->id_lang);
       $fields['id_carrier'] = intval($this->id_carrier);
       $fields['recyclable'] = intval($this->recyclable);
       $fields['gift'] = intval($this->gift);
       $fields['gift_message'] = pSQL($this->gift_message);
       $fields['ip_adress'] = pSQL($_SERVER['REMOTE_ADDR']);// ajout de cette ligne
       $fields['date_add'] = pSQL($this->date_add);
       $fields['date_upd'] = pSQL($this->date_upd);



Explication: on ajout le contenu de la variable ip_adress par la variable serveur REMOTE_ADDR

Modification de adminTab:

Ligne 1182 remplacer:

                    if (!isset($params['position']))
                       echo ' onclick="document.location = \''.$currentIndex.'&'.$this->identifier.'='.$id.($this->view? '&view;' : '&update;').$this->table.'&token;='.($token!=NULL ? $token : $this->token).'\'">'.(isset($params['prefix']) ? $params['prefix'] : '');
                   else
                       echo '>';



par: (correction ici)

                   if(!isset($params['position'])){
                       if(isset($params['myLink'])){
             echo '>bot? / Localiser -> ';
                       }else{
             echo ' onclick="document.location = \''.$currentIndex.'&'.$this->identifier.'='.$id.($this->view? '&view;' : '&update;').$this->table.'&token;='.($token!=NULL ? $token : $this->token).'\'">'.(isset($params['prefix']) ? $params['prefix'] : '');
                       }
                   }else{
           echo '>';
                       if(isset($params['myLink'])){
             echo 'bot? / Localiser -> ';
                       }
               }



Explication: Par défaut, la cellule td a un onclick qui redirige vers le panier. Hors un lien à droite avec une loupe permet de le visualiser. DONC, on vire ce lien sur td qui va nous embeter lors que l'on fait le lien pour l'affichage de "bot?"

Link to comment
Share on other sites

Op, on continue.

Modification de ./admin/tabs/adminCarts.php

remplacer:

         $this->fieldsDisplay = array(
       'id_cart' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
       'customer' => array('title' => $this->l('Customer'), 'width' => 80, 'filter_key' => 'c!lastname'),
       'total' => array('title' => $this->l('Total'), 'callback' => 'getTotalCart', 'orderby' => false, 'search' => false, 'width' => 50, 'align' => 'right', 'prefix' => '', 'suffix' => '', 'currency' => true),
       'carrier' => array('title' => $this->l('Carrier'), 'width' => 25, 'align' => 'center', 'callback' => 'replaceZeroByShopName'),
       'date_add' => array('title' => $this->l('Date'), 'width' => 120, 'align' => 'left', 'type' => 'datetime', 'filter_key' => 'a!date_add'));



par:

         $this->fieldsDisplay = array(
       'id_cart' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
       'customer' => array('title' => $this->l('Customer'), 'width' => 80, 'filter_key' => 'c!lastname'),
       'total' => array('title' => $this->l('Total'), 'callback' => 'getTotalCart', 'orderby' => false, 'search' => false, 'width' => 50, 'align' => 'right', 'prefix' => '', 'suffix' => '', 'currency' => true),
       'carrier' => array('title' => $this->l('Carrier'), 'width' => 25, 'align' => 'center', 'callback' => 'replaceZeroByShopName'),
       'date_add' => array('title' => $this->l('Date'), 'width' => 120, 'align' => 'left', 'type' => 'datetime', 'filter_key' => 'a!date_add'),
       'ip_adress' => array('title' => $this->l('Adresse ip'), 'myLink' => true, 'search' => false, 'align' => 'left', 'type' => 'text', 'width' => 150, 'filter_key' => 'c!ip_adress'));



explication: On a rajouté la colonne "Adresse ip".

Link to comment
Share on other sites

Utilisation:

Lors d'un clic sur "bot?" vous êtes redirigé sur un site qui recence les ips en relations avec les bots.

Vous tombez alors sur une page avec ce genre de ligne

70.238.167.28
Bot Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/spider.html;'>http://www.80legs.com/spider.html;) Gecko/2008032620


Si vous cliquez dessus la page suivante affiche normalement à gauche:

User Agent Vitals:

Bot or Browser:
This User Agent is a known bot. This User Agent is a Bot!

First Seen On:
7/21/2009 1:12:00 PM

URL:
http://www.80legs.com/spider.html

Related Categories:
All Bots




Voilà, vous devriez savoir si c'est un bot ou pas. Sous réserve étant donné que le site ne connait pas toutes les adresses ip de bot... Ensuite à vous aussi de voir. Si une ip n'est pas répertoriée mais qu'elle fait 3 paniers en 10secondes, cela va de soit que ce n'est pas un utilisateur....

Pour le reste, je vous invite à bloquer l'ip par htaccess:

http://www.prestashop.com/forums/viewthread/24947


Cordialement, Guillaume.

(toute critique est bonne à prendre)
Link to comment
Share on other sites

  • 1 month later...
  • 5 months later...

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...