HTTP REFERER autoriser que 3 pages à acceder à une page

Eléphanteau du PHP | 13 Messages

20 juin 2007, 11:48

je vais chercher de ce coté là

Code : Tout sélectionner

La fonction preg_match
encore merci pour ton aide

Eléphant du PHP | 396 Messages

20 juin 2007, 12:31

Une fois qu'il a récuperé (et enlevé) ce qui va de '?' à la fin de l'url il teste la présence du fichier dans le tableau.
Après derrière effectivement il faut tester les valeurs passées dans les variables, mais c'est un autre problème que celui-ci :)

Eléphanteau du PHP | 13 Messages

23 juin 2007, 12:04

en fait j'ai la solution pour n'autoriser que quelques liens externes à arriver sur accueil.htm
voila le script qui fonctionne pour les liens externes
<?php

// Initialisation du referer
if( !isset( $_SERVER['HTTP_REFERER'] ) )
{
    $_SERVER['HTTP_REFERER'] = "" ; 
}
// verifie si chaine de caractere present dans les url autorisé
$IsOk=false;
if(strpos($_SERVER['HTTP_REFERER'],"www.provenance.htm")!=0) // page autorisée 1
	$IsOk=true;
if(strpos($_SERVER['HTTP_REFERER'],"toto.php?idc")!=0) // page autorisé 2 contenant ces termes
	$IsOk=true;
if(strpos($_SERVER['HTTP_REFERER'],"quiz.php")!=0) // page autorisé 3 contenant ces termes
// Redirection
if(!$IsOk)
{
	header("Location:http://www.message_erreur.php"); // on le renvoie ici
	exit();
}
// fin script

?>

helas sur cette page accueil.htm j'ai un menu qui charge en dynamique des liens via sql et la ça ne marche plus, des que je clique sur le menu il me redirige sur la page d'erreur..why ?

la solution en fait serait de faire une session avec comme valeur autorisée l'url www.provenance.htm, donc utiliser la session avec http_referer mais là meme si je pense que ç'est pas vraiment compliqué, vu mon niveau je coince :x

Petit nouveau ! | 2 Messages

23 juin 2007, 12:38

Salut,

Il faut faire particulièrement attention lorsque tu utilises un test du style "!=0". Il est fortement conseiller de tester le type exacte attendu.

Pour ton code, la fonction strpos() renvoit false (boolean) si la chaine n'a pas été trouvée. Dans le cas contraire elle renvoit un entier pour la position. Or en PHP les conditions "!=0" et "!=false" vont réagir de la même manière.

Je te conseil donc d'utiliser la synthaxe suivante :
if(strpos($_SERVER['HTTP_REFERER'],"www.provenance.htm")===false)  
    $IsOk=true; 
Ainsi la condition sera validée uniquement si la chaine "www.provenance.htm" n'a pas été trouvée.

A bientôt

Loopinglechat

Eléphanteau du PHP | 13 Messages

23 juin 2007, 22:15

thank looping pour ton conseil

bon j'ai mis donc ce scipt
<?php
// Initialisation du referer
if( !isset( $_SERVER['HTTP_REFERER'] ) )
{
    $_SERVER['HTTP_REFERER'] = "" ; 
}
// verifie si chaine de caractere present dans les url autoriss
$IsOk=false;
if(strpos($_SERVER['HTTP_REFERER'],"http://provenance.html")===FALSE)
	$IsOk=true;
if(strpos($_SERVER['HTTP_REFERER'],"browse.php")===FALSE)
	$IsOk=true;
if(strpos($_SERVER['HTTP_REFERER'],"quiz.php")===FALSE)
	$IsOk=true;
// Redirection
if(!$IsOk)
{
	header("Location:http://www.message_erreur.php"); // on le renvoie ici
	exit();
}
?>
***NEWS !

en mettant !==FALSE au lieu de ===FALSE ça marche ! merci à Stephan d'un autre forum !
:D

Petit nouveau ! | 2 Messages

24 juin 2007, 16:01

Salut,

En fait j'ai fait une petite erreur. Comme je l'ai dit dans mon dernier post, le code :
strpos($_SERVER['HTTP_REFERER'],"www.provenance.htm")===false
signifie : la chaîne "www.provenance.htm" n'est pas trouvée dans $_SERVER['HTTP_REFERER'].

Dans ton cas, il te faut l'option inverse. De plus, je ne pense pas que ce soit judicieux de faire de multiple IF. Au final, ton code devrait ressembler à ça (attention je n'ai pas testé) :
<?php
// Initialisation du referer
if( !isset( $_SERVER['HTTP_REFERER'] ) )
{
    $_SERVER['HTTP_REFERER'] = "" ; 
}
// verifie si chaine de caractere present dans les url autorisés
if(
		(strpos($_SERVER['HTTP_REFERER'],"provenance.html")===false))
	&&
		(strpos($_SERVER['HTTP_REFERER'],"browse.php")===false))
	&&
		(strpos($_SERVER['HTTP_REFERER'],"quiz.php")===false))
	)
{
	header("Location:http://www.message_erreur.php"); // on le renvoie ici
	exit();
}
    
}
?> 

Eléphanteau du PHP | 13 Messages

26 juin 2007, 15:50

merci pour l'info :D

est til possible qu'a la place du mot de passe envoyé par formulaire ça soit un url referer qui sert de password, apres pendant toute la session l'internaute navigue sur le site ?

Eléphant du PHP | 396 Messages

26 juin 2007, 16:59

Tu stockes ce que tu veux en session ;)

ViPHP
AB
ViPHP | 5818 Messages

26 juin 2007, 17:15

Je ne sais pas si cela a été dit dans le sujet mais les scripts basés sur $_SERVER['HTTP_REFERER'] sont souvent assez aléatoires car $_SERVER['HTTP_REFERER'] n'est pas souvent renseignée.
Suivant mon expérience elle est renseignée 2 fois sur 10 environ.

Invité
Invité n'ayant pas de compte PHPfrance

26 juin 2007, 17:42

oui je sais que ç'est aléatoire et je m'en rend compte ! :x

pour la première page ça va m'ai j'ai des liens dedans qui font des appels à la base et ça me foire tout


il faudrait stocker l'url de provenance dans une session

est ce que tu peut m'indiquer la syntaxe ? je vais chercher de mon coté mais si tu peut m'indiquer le début :wink:

ViPHP
AB
ViPHP | 5818 Messages

26 juin 2007, 17:50

Ce n'est pas tellement la manière de stocker qui pose pb c'est simplement que tous les navigateurs (ça dépend des réglages modifiables par l'utilisateur) ne renvoient pas la variable $_SERVER['HTTP_REFERER']. Et dans ce cas tu obtiendra 0 à la place de la valeur.