Aller au contenu

Interdire les acces en GET à une page


Sujets conseillés

Posté

Bonjour à tous,

Je suis débutant en PHP (en HTML aussi d'ailleurs) :blush: , et je pensait trouver de moi-même un moyen simple en PHP de réserver l'acces à une page qui ne doit être accédée que par un formulaire.

Malheureusement ça ne marche pas :boude: . Voila un passage PHP que j'ai introduit au début de mon <body>:

<?php

if ( $_SERVER['REQUEST_METHOD'] == "GET") {

header("Location: http://www.pagedaccueil.com/");

exit();

}

?>

Le but étant de rediriger l'internaute sur la page d'accueil du site, s'il entrait l'URL de la page en question :whistling: .

Merci d'avance de m'aider à avancer.

Posté

Salut et bienvenue au HUB et dans le monde du PHP;

Bon, c'était bien tenter et c'est à peu près comme ça que je procède.

Seulement, à moins qu'il soit trop tard et que je sois à coté de la plaque, là tu dis que si il y a un GET aller à la page d'accueil, en utilisant la même méthose, que je n'ai jamais testé, ça devrait plutot être

if(!$_SERVEUR ....
{
..
}

le point d'intérogation "!" avant ta variable va donner une contradiction à ta condition, pour être plus clair si il n'y a pas ...

Par contre j'utilise une autre méthode

ton GET a une 'identité", name $_GET['id_user'] (par exemple) donc tu peux tester si il existe

if(!$_GET['id_user'])
{
echo "Bye";
}

Seulement on pourra quant même atteindre ta page en mettant une url bidon avec index.php?id_user=1

Donc il te faudra aussi tester la valeur du GET

exemple

if((!$_GET['id_user']) || ($_GET['id_user'] != 1))
{
echo "il n'y a pas de get id_user et même si il y en a un il n'est pas égale à 1";
}

Pour concaténer des conditions tu utilises :

"||" pour "ou"

"&&" pour "et"

Posté

Tu as 2 méthodes. la première, c'est effectivement de tester le GET.

if (! isset($_GET))exit();

La seconde, c'est de tester la provenance du visiteur. S'il ne vient pas de la page du formulaire, alors 'exit'.

if (! isset($_SERVER['HTTP_REFERER'])) exit();

le 'isset vérifiant si la variable existe ou non.

Anonymus.

Posté
La seconde, c'est de tester la provenance du visiteur. S'il ne vient pas de la page du formulaire, alors 'exit'.

<{POST_SNAPBACK}>

C'est une solution qui marche, mais il faut savoir qu'il est très facile de modifier le HTTP_REFERER :-(. Ce n'est donc pas suffisant pour une page sensible mais l'est tout à fait pour simplement éviter les problèmes de navigation.

Posté

$_GET et $_POST sont il me semble tjs "existants". Il faut tester la longueur du tableau.

Posté

En fait, tout dépend de la configuration de ton serveur.

S'ils sont toujours existants, il suffit de rajouter :

if ((!isset($_GET))||(empty($_GET)))

Ce qui vérifiera si $_GET n'existe pas, ou s'il est vide.

Anonymus.

Posté

Bein merci pour les réponses, mais rien ne marche.

La methode :

if (!isset($_SERVER['HTTP_REFERER'])) exit();

me plait bien, mais ou dois-je ajouter

if ((!isset($_GET))||(empty($_GET)))

et pourquoi y a t'il plus de parenthèse fermantes qu'ouvrantes ?

Posté

Au lieu de mettre :

if ( $_SERVER['REQUEST_METHOD'] == "GET") {
header("Location: http://www.pagedaccueil.com/");
exit();
}

Tu mets :

if (  ( ! isset($_GET) )   ||   ( empty ($_GET) )  )
     header("Location: http://www.pagedaccueil.com/");

Il y a bien autant de parenthèses ouvrantes que fermantes, comme dans mes exemples ;)

La seconde méthode est identique, à savoir :

if (  ( ! isset($_SERVER['HTTP_REFERER']) )   ||   ( empty ($_SERVER['HTTP_REFERER']) )  )
     header("Location: http://www.pagedaccueil.com/");

Tu peux mettre les 2 méhodes tout en haut de ta page, en premier.

Voilà.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...