HTTP REFERER autoriser que 3 pages à acceder à une page

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : HTTP REFERER autoriser que 3 pages à acceder à une page

par AB » 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.

par Invité » 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:

par AB » 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.

par Rei Itchido » 26 juin 2007, 16:59

Tu stockes ce que tu veux en session ;)

par Stinger » 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 ?

par loopinglechat » 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();
}
    
}
?> 

par Stinger » 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

par loopinglechat » 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

par Stinger » 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

par Rei Itchido » 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 :)

par Stinger » 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

par zeus » 20 juin 2007, 11:38

A part insérer une notion d'expression régulière, je ne vois pas :-k
Par contre, la présence d'expressions régulières complique grandement l'utilisation de in_array() :S

par Stinger » 20 juin 2007, 11:25

ça marche merci Zeus, (j'ai corrigé ton erreur de frappe tu avait mis

Code : Tout sélectionner

[HTTP_REFERER'']
au lieu de

Code : Tout sélectionner

['HTTP_REFERER']
ça avance pour moi c'est super

est ce possible plutôt que de rentrer une centaine de ligne n'y aurait-il pas moyen dans l'url du type toto2.php?idc=truc de mettre quelquechose du genre toto2.php?*.* ( caractere joker en sorte )

merci 2000 fois

par zeus » 20 juin 2007, 11:03

Déjà, pense à utiliser les balises

Code : Tout sélectionner

et PHP qui sont disponibles au dessus de la zone de saisie quand tu postes un message. Ca fait 2 fois que je modifie ton message ;) Ensuite, tu peux remplir un tableau contenant toutes les urls d'où tu ne doit pas venir, et tu peux simplement tester si le REFERER n'est pas présent dans ce tableau. exemple en reprenant ton code, en le réindentant et en le commentant : [php]// Initialisation du referer if( !isset( $_SERVER['HTTP_REFERER'] ) ) { $_SERVER['HTTP_REFERER'] = "" ; } // Remplissage du tableau d'url authorisée $a_allowed_url[] = "http://localhost/Web_Service/toto1.php"; // la page 1 autorisée $a_allowed_url[] = "http://localhost/Web_Service/toto2.php"; // la page 2 autorisée $a_allowed_url[] = "http://localhost/Web_Service/toto3.php"; // la page 3 autorisée // Si le referer n'est aucune des pages autorisées if ( !in_array($_SERVER[HTTP_REFERER''], $a_allowed_url) ) { // Redirection header("Location:http://www.memopage.com/webservice/message_erreur.php "); // on le renvoie ici }[/php] Il ne te reste plus qu'ensuite à ajouter une url pour que le test évolue, même pas besoin de retoucher le script

par Rei Itchido » 20 juin 2007, 11:02

Je rajouterais que si ta page continue sous ce test, il faut mettre exit(); après le header pour que la redirection soit bien effective ;)

http://fr.php.net/header
if( ($condition != $_SERVER['HTTP_REFERER']) && ($condition2 != $_SERVER['HTTP_REFERER']) && ($condition3 != $_SERVER['HTTP_REFERER']) ) // si différent de l’une de ces 3 pages
{
header("Location:http://www.memopage.com/webservice/message_erreur.php "); // on le renvoie ici
exit();
}