Aide a propos de if($_SERVER['HTTP_REFERER']

WRInaute occasionnel
Bonjour tout le monde
j'ai du mal a utilisé en php la commande if($_SERVER['HTTP_REFERER']
je veu appliquer ca a une page a moi dont le code et en php+html

je veu utilisé (je veu aussi savoir si une exact comme syntaxe)

if($_SERVER['HTTP_REFERER'] != "http://www.mon_site.fr")
{
echo 'Accés interdit !';
}
else {

Ma page php

}

Ma page php est du genre :
Code:
<?php
$myWhere = 'test';
$myValue = $_GET['test'];
require "config.php";
$test = urldecode($_GET['test']);
$query = "SELECT cover FROM DB WHERE test = '{$test}';";
$result = mysql_query($query);
$row1 = mysql_fetch_assoc($result);
?>
<html>
<head>
<title>Mon site</title>
<META NAME="DESCRIPTION" CONTENT="">
</head>
<body>
<div>
<div style="z-index: 1;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,47,0" width="100%" height="100%" align="center">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="http://www.mon_site.fr/ok.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed src="test.swf" />
</object>
</div>

<?php
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
$crawltsite=1;
include("/home/monsite/robots/crawltrack.php");
echo"<p><a href=\"http://www.crawltrack.fr\">
<img src=\"http://www.mon_site.fr/robots/images/nologo.png\" alt=\"CrawlTrack: free crawlers and spiders tracking script for webmaster- SEO script -script gratuit de détection des robots pour webmaster\" width=\"1\" height=\"1\" style=\"border:0\"/>
</a></p>\n";
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
?>

</body>
</html>

quelq'un peut m'iadé a appliqué ca a ma page?

Merci d'avance
 
WRInaute accro
Code:
<?php

if($_SERVER['HTTP_REFERER'] != "http://www.mon_site.fr")
{
echo 'Accés interdit !';
}
else { 

$myWhere = 'test';
$myValue = $_GET['test'];
require "config.php";


$test = urldecode($_GET['test']);
$query = "SELECT cover FROM DB WHERE test = '{$test}';";
$result = mysql_query($query);
$row1 = mysql_fetch_assoc($result);
?>
<html>
<head>
<title>Mon site</title>
<META NAME="DESCRIPTION" CONTENT="">
</head>
<body>
<div>
<div style="z-index: 1;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,47,0" width="100%" height="100%" align="center">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="http://www.mon_site.fr/ok.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed src="test.swf" />
</object>
</div>

<?php
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
$crawltsite=1;
include("/home/monsite/robots/crawltrack.php");
echo"<p><a href=\"http://www.crawltrack.fr\">
<img src=\"http://www.mon_site.fr/robots/images/nologo.png\" alt=\"CrawlTrack: free crawlers and spiders tracking script for webmaster- SEO script -script gratuit de détection des robots pour webmaster\" width=\"1\" height=\"1\" style=\"border:0\"/>
</a></p>\n";
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
?>

</body>
</html> 

<? } ?>

Enjoy PHP :wink:
 
WRInaute occasionnel
Merci KOogar
ca a l'air de marcher ! enfin j'ai tout le temps "Accés interdit"
ce qui veu dire que le refferant n'es pas pris en concideration
ce que je veu c'est permettre d'acédé a cette page depuis toutes les pages de mon sites , mais pas d'un site exterieure
y'a t il pas une solution pour cela problem
j'ai deja essayé avec le .htaccess mais ca marche pas quand la page est apelé dans un popup (IE) :(

Merci de me repondre
 
WRInaute passionné
Voir déja si le serveur reconnait la variable.
Quelque chose comme:

echo $_SERVER[HTTP_REFERER];

qui doit afficher le site.
Si oui, cela doit forcément marcher.
 
WRInaute occasionnel
Re
oui j'ai deja essayer et ca m'affiche bien le refferer
ca marche aussi avec le code que j'ai utulisé quand je met une page exact comme refferer , mais ca marche pas quand je met mon nom de domaine et quand j'essaye a accedé a ma page depuis una page domaine.com/page1.php par exemple
 
Nouveau WRInaute
Je suis pas un pro mais...

Je suis pas un pro mais peut-être qu'un :
Code:
 if (eregi('http://www.mon_site.fr', $_SERVER["HTTP_REFERER")) {
echo 'Accés interdit !';
}
else {...}

pourrait être plus adapté
en tout cas ça ne coûte rien d'essayer.
 
WRInaute accro
Re: Je suis pas un pro mais...

c_mous a dit:
Je suis pas un pro mais peut-être qu'un :
Code:
 if (eregi('http://www.mon_site.fr', $_SERVER["HTTP_REFERER")) {
echo 'Accés interdit !';
}
else {...}

pourrait être plus adapté
en tout cas ça ne coûte rien d'essayer.

avec un ! devant eregi ;)...

Mais si je lui envoie un visiteur via un "jump" du style goto.php?url=http://www.mon_site.fr --> la condition est respectée :roll:
 
WRInaute occasionnel
Re: Je suis pas un pro mais...

c_mous a dit:
Je suis pas un pro mais peut-être qu'un :
Code:
 if (eregi('http://www.mon_site.fr', $_SERVER["HTTP_REFERER")) {
echo 'Accés interdit !';
}
else {...}

pourrait être plus adapté
en tout cas ça ne coûte rien d'essayer.
Bonjour
Merci pour votre reponse
je vien d'essayé et ca me donne ici "Acces interdit" avec Ie , par contre sa affiche le contenu avec firefox! sachant que qu'on parle d'une page qui s'ouvre dans un popup et je croit que c'est ca qui pose problem (le fait d'ouvrir la fenetre avec du javascript)
quelqu'un a deja eu ce genre de problems ?
 
Nouveau WRInaute
merci pour le "!" . :oops:
Pour contrer le jump, on peut faire un :
Code:
 if (!eregi($_SERVER["REMOTE_HOST"], $_SERVER["HTTP_REFERER")) {
echo 'Accés interdit !';
}
else {...}

par contre, ie ne reconnaitra le refferant pour un lien pop_up.
Si un target="_blank" ne suffit pas, il faudra alors passer par une protection par base de donnée...
 
WRInaute accro
c_mous a dit:
merci pour le "!" . :oops:
Pour contrer le jump, on peut faire un :
Code:
 if (!eregi($_SERVER["REMOTE_HOST"], $_SERVER["HTTP_REFERER")) {
echo 'Accés interdit !';
}
else {...}

et ?? ca la ne changera rien. Le host on le connait deja. Ce qui faut c'est le symbole circonflexe ^ pour interdire toute url ayant une ecriture avant le HOST.

Code:
 if (!eregi('^http://www.mon_site.fr', $_SERVER["HTTP_REFERER"))

devrait faire l'affaire
 
WRInaute occasionnel
KOogar a dit:
Code:
 if (!eregi('^http://www.mon_site.fr', $_SERVER["HTTP_REFERER"))

devrait faire l'affaire
Bonsoir
je vien de testé ca marche tres bien sous firefox mais pas avec IE :(
j'ai deja mis avant une protection par .htaccess qui marche aussi avec les popup de firefox mais pas avec ceux de IE

je sais vraiment plus quoi faire
 
WRInaute passionné
J'ai aussi vu cela mais je n'ai pas essayé ni approfondi:

if (
$_SERVER[”HTTP_REFERER”] !=
‘http://’ . $_SERVER[”HTTP_HOST”] . ‘/’
&&
$_SERVER[”HTTP_REFERER”] !=
‘http://’ . $_SERVER[”HTTP_HOST”] . ‘/index.php’
)
exit("message");
 
WRInaute occasionnel
php.net a dit:
'HTTP_REFERER'
L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.

Je ne sais pas pour quelles raisons tu veux bloquer l'accès de cette page depuis une page extérieure mais dans beaucoup de cas tu as le choix de passer par autre chose que .htaccess ou les variables superglobales.

exemples :

non affichage de la page si l'utilisateur n'est pas enregistré et message d'erreur
creation d'une variable session sur les pages d'entrée du site que tu récupères sur les autres pages
 
WRInaute occasionnel
erestrebian a dit:
php.net a dit:
'HTTP_REFERER'
L'adresse de la page (si elle existe) qui a conduit le client à la page courante. Cette valeur est affectée par le client, et tous les clients ne le font pas. Certains navigateurs permettent même de modifier la valeur de HTTP_REFERER, sous forme de fonctionnalité. En bref, ce n'est pas une valeur de confiance.

Je ne sais pas pour quelles raisons tu veux bloquer l'accès de cette page depuis une page extérieure mais dans beaucoup de cas tu as le choix de passer par autre chose que .htaccess ou les variables superglobales.

exemples :

non affichage de la page si l'utilisateur n'est pas enregistré et message d'erreur
creation d'une variable session sur les pages d'entrée du site que tu récupères sur les autres pages
j'utilise pas de session sur mon site
pour le .htaccess j'ai deja essauer et comme j'ai dit ca marche avec les popup firefox mais pas avec ceux de IE
 
WRInaute impliqué
A tu déja testé avec IE et FF ?:

En rajoutant au début (en rouge)

<?php
echo $_SERVER['HTTP_REFERER'] ;
if($_SERVER['HTTP_REFERER'] != "http://www.mon_site.fr")
{
echo 'Accés interdit !';
}
.
.
.

Les deux chaines de caractères sont bonnes dans ce cas précis ?
 
WRInaute occasionnel
nifrou a dit:
A tu déja testé avec IE et FF ?:

En rajoutant au début (en rouge)

<?php
echo $_SERVER['HTTP_REFERER'] ;
if($_SERVER['HTTP_REFERER'] != "http://www.mon_site.fr")
{
echo 'Accés interdit !';
}
.
.
.

Les deux chaines de caractères sont bonnes dans ce cas précis ?
je vien d'essayer
sur FF ca m'affiche
http://www.monsite.com/ma_page_precedente.php Accés interdit !

alors que sur IE ca affiche seulement
Accés interdit !

mais dans les 2 cas ca ne m'afiche pas le contenu alors que le refferant est bien mon site
 
WRInaute impliqué
e vien d'essayer
sur FF ca m'affiche
http://www.monsite.com/ma_page_precedente.php Accés interdit !

alors que sur IE ca affiche seulement
Accés interdit !

Lol Pas top :cry:

Ta piste Javascript me semble de plus en plus probable.

Essaye de modifier l'URL de la Popup avec supprimer le -http://www.mon_site.fr/
.
.
ou encore
.
.
T'a peut être les options de sécurité d'IE sur très (trop) élevé -> et qui bloque les popups (configure un coup)
 
WRInaute occasionnel
Non j'arrive a afficher les popup sur IE
le problem ne vien pas de mon Pc , mais surement de mon serveur , mais je sais pas comment je peut reglé ce problem
 
WRInaute occasionnel
Code:
<?php

$origine=parse_url($_SERVER['HTTP_REFERER'])

if ($origine['host']=="www.mon_site.fr")
{
echo 'Accés interdit !';
}
else {

$myWhere = 'test';
$myValue = $_GET['test'];
require "config.php";


$test = urldecode($_GET['test']);
$query = "SELECT cover FROM DB WHERE test = '{$test}';";
$result = mysql_query($query);
$row1 = mysql_fetch_assoc($result);
?>
<html>
<head>
<title>Mon site</title>
<META NAME="DESCRIPTION" CONTENT="">
</head>
<body>
<div>
<div style="z-index: 1;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,47,0" width="100%" height="100%" align="center">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="http://www.mon_site.fr/ok.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed src="test.swf" />
</object>
</div>

<?php
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
$crawltsite=1;
include("/home/monsite/robots/crawltrack.php");
echo"<p><a href=\"http://www.crawltrack.fr\">
<img src=\"http://www.mon_site.fr/robots/images/nologo.png\" alt=\"CrawlTrack: free crawlers and spiders tracking script for webmaster- SEO script -script gratuit de détection des robots pour webmaster\" width=\"1\" height=\"1\" style=\"border:0\"/>
</a></p>\n";
echo"<!--~~~CrawlTrack~~~~~~~~~~~~~~~~~~~~-->\n";
?>

</body>
</html>

<? } ?>

J'ai repris le script qu'avait poster koogar où j'ai remplacé les lignes du haut...
 
WRInaute occasionnel
J'obtien cette erreur :(
Code:
Parse error: parse error, unexpected T_IF in /var/www/virtual/monsite.com/htdocs/mapage.php on line 4
 
WRInaute occasionnel
Re
je vien de testé , mais ca n'a rien changé
la page est afficher meme si c pas le bon referrent :(

Merci comeme
 
WRInaute occasionnel
tu peux faire un echo sur la variable $origine['host'] et dire ce qu'elle renvoie?

tu n'as pas une page intermédiaire (initialisation de variables, redirection du visiteur selon la langue...)?
 
WRInaute occasionnel
un echo me renvoi bien l'adresse de mon site mais seulement sur FF
sur IE la page s'affiche sans que l'echo aparai (etrange :( )
je croit que je vais devenir fou
 
WRInaute occasionnel
elle te renvoie l'adresse de ton site dans les deux cas (entrée par ton site et entrée extérieure)?

d'habitude, les différence entre navigateur viennent de l'interprétation de l'html, c'est pas marqué tout en haut dans la source pour IE :?:
 
WRInaute occasionnel
Re
avec FF
entrer par mon site afiche : l'adresse de mon site + acces interdit
entré par un site exterieureafiche : l'adresse du site exterieure + le contenu

IE: dans les 2 cas ca affiche le contenu de la page sans trouvé de trace du echo de $origine['host'] meme dans le code source
 
WRInaute occasionnel
oui c'est bon pour FF
mais pour IE c'est toujour pareil et c'est le meme problem que j'ai eu avec le .htaccess ou meme http_referrer
 
WRInaute occasionnel
le http_referrer ne fonctionne tout bonnement pas sur IE, j'ai rajouté le lien en edit entre temps dans mon post précédent....

je n'ai par contre pas de solution pour palier la problème sous IE...
 
Nouveau WRInaute
Bonjour, je souhaite faire un if($_SERVER['HTTP_REFERER'] mais avec une particularitée je m'explique :

Enfaite je souhaite que le eregi détecte site.com même si le lien à été cliquer depuis site.com/page2.html en gros peut importe depuis quelle page du site

Ne fonctionne malheureusement pas :

if (!eregi("*.site.com*", $_SERVER["HTTP_REFERER"])){

Après lecture des manuels c'est [.+] qui détecte tout type de caractères donc j'essaie :

if (!eregi("[.+]site.com[.+]", $_SERVER["HTTP_REFERER"])){

Et rien à faire dans ce cas le if passe toujours même si le site référent n'est pas site.com

Pourriez vous m'aider ?

d'avance merci :)
 
WRInaute accro
Bonjour,
je n'ai plus la fonction (non nâtive) en tête mais il suffit de récupérer le $_SERVER['HTTP_REFERER'] de le traiter avec des expressions régulières afin d'extraire le nom de domaine de l'URL récupérée puis de le comparer à la chaine attendue.
Une recherche sur Google te donnera rapidement un exemple de code.
@+
 
Nouveau WRInaute
alors en avec :

if (eregi("http://www.site.com.+", $_SERVER["HTTP_REFERER"]))

ca fonctionne par contre si la visite provient d'un sous domaine ex: blog.site.com ca ne fonctionne plus.....
 
Nouveau WRInaute
bon bah enfaite avec if (eregi("http://.+.site.com.+", $_SERVER["HTTP_REFERER"])) c'est ok :D

j'ai oublié une possibilitée d'après vous ?
 
Discussions similaires
Haut