Controler le referer

shinigami
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 22:06

Bonjour,
J'ai installé un chat en php sur mon site. Ce que je n'aime pas c'est qu'il y a d'autres sites qui font des liens directement vers mon chat. Les gens peuvent croire que ce chat appartient à d'autres sites...

J'ai pensé à contrôler le referer avec $HTTP_REFERER :
if($HTTP_REFERER!= 'http://www.monsite.fr')
{echo 'Accéder au chat ici : www.monsite.fr';
exit();}
Mais le problème c'est que le referer est différent à chaque fois qu'on est sur une page différente.
Exemple :
www.monsite.fr/page1.php
www.monsite.fr/page2.php
www.monsite.fr/page3.php

Est-t-il possible de contrôler uniquement le nom de domaine en referer ?

ViPHP
fab
ViPHP | 2657 Messages

17 nov. 2005, 22:10

en méthode pas trop lourde essaye strpos() :
if(strpos($_SERVER['HTTP_REFERER'],'tonsite.com')) {
 echo 'le visiteur vient de ton site';
}
else
{
 echo 'pas de ton site';
}
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

shinigami
Invité n'ayant pas de compte PHPfrance

17 nov. 2005, 22:40

Merci, ca marche.
Le mieux c'est ça :
if(strpos($_SERVER['HTTP_REFERER'],'monsite.fr'))
{ }
else
{
echo '<SCRIPT language=JavaScript type=text/javascript>
location.replace("http://www.monsite.fr");
</SCRIPT>';
exit();
}
Je suis obligé de mettre quelque chose quand le visiteur provient bien de mon site ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 nov. 2005, 00:42

SAlut, inverse la condition avec "!" (juste devant strpos, qui correspond a la négation) pour ne pas avoir de "else":
if(!strpos($_SERVER['HTTP_REFERER'],'monsite.fr'))
{
    echo '<SCRIPT language=JavaScript type=text/javascript>
    location.replace("http://www.monsite.fr");
    </SCRIPT>';
    exit();
}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 353 Messages

18 nov. 2005, 11:41

Cette solution n'est évidemment pas fiable puisqu'elle est basée sur des informations envoyés par le client (le navigateur) et que celle-ci peuvent être modifié aisément.