2010-10-23 9 views
0

Quelqu'un peut-il expliquer comment je peux utiliser

$_SERVER['REQUEST_URI'] 

Comment puis-je faire comme nécessaire: Pour accéder à cette page, vous devez venir de cette page (les deux sont internes)?

Je pensais que $ _SERVER pouvait le faire pour moi, et j'ai trouvé l'exemple ci-dessus dans php.net. Comment puis-je m'en servir?

Merci

Répondre

2

REQUEST_URI est le chemin URI et la requête telle qu'elle a été demandée. En outre, $_SERVER['HTTP_REFERER'] contient la valeur de HTTP request header field Referer si disponible. Donc, pour vérifier si les deux contiennent le même chemin URI, vous pouvez le faire:

if (isset($_SERVER['HTTP_REFERER'])) && parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) === parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH)) { 
    // Referer existing and its path is equal to the current requested URI path 
} 

Mais la raison pour laquelle isset est utilisé dans ce cas il que le Referer est pas toujours envoyé. En général, uniquement lorsque la demande est provoquée en suivant un lien ou en envoyant un formulaire, ce champ d'en-tête sera envoyé par le client. Il est donc probable que ce champ d'en-tête ne soit pas défini. En plus de cela, sa valeur peut aussi être forgée et n'est donc pas digne de confiance comme toute autre information provenant du client.

C'est également la raison pour laquelle vous ne devriez pas utiliser cette information pour vérifier l'authenticité d'une demande. Utilisez votre propre authentication tokens à la place.

0

son comme ce que vous voulez est $_SERVER['HTTP_REFERER'] - ce contiendra l'URL de la page que l'utilisateur a cliqué pour générer la demande actuelle.

Notez que ce n'est pas un mécanisme particulièrement digne de confiance, puisqu'il est easy to spoof. Cependant, si c'est purement pour un usage interne, il peut vous convenir.

Voir aussi

0

Il est assez facile de modifier $ _SERVER fonctions, y compris $ _SERVER [ 'HTTP_REFERER']. Ainsi, ce n'est pas une méthode sûre pour vérifier que quelqu'un a visité une autre page auparavant. Je vous suggère d'utiliser des variables de session à la place (par exemple, créer une nouvelle variable de session quand quelqu'un visite X.php, et vérifier dans la page Y.php si la variable existe.Vous pouvez changer la variable dans la page Z.php si l'utilisateur doit avoir Si vous voulez vraiment utiliser les variables $ _SERVER, comme je l'ai dit plus haut, utilisez $ _SERVER ['HTTP_REFERER'] qui contient la dernière URL que l'utilisateur a visité avant qu'il ne se rende sur votre site. page.

1

Vous avez la mauvaise variable. Je pense que vous voulez $_SERVER['HTTP_REFERER'] qui vous donne la page d'où vient l'utilisateur.

Notez que certains pare-feu suppriment l'en-tête referer de toutes les requêtes HTTP, ainsi HTTP_REFERER peut parfois être vide. Notez également que HTTP_REFERER peut être défini par le navigateur Web (dans le client) de sorte que vous ne devez pas compter sur lui pour la sécurité. Certains utilisateurs peuvent définir eux-mêmes leurs en-têtes de référence.

+0

Ce n'est pas pour la sécurité du tout. Pouvez-vous me donner un exemple comment rendre "obligatoire" que l'utilisateur a visité x.php avant d'être en mesure d'accéder à y.php. Même s'ils peuvent le tromper, cela n'a pas d'importance. – Aborted

0

$ _SERVER ['HTTP_REFERER'] est un bon moyen de connaître la page d'appel.Mais comme cela pose problème, vous pouvez à la place définir des drapeaux à partir des pages. Si $ _SERVER ['HTTP_REFERER'] fonctionne bien alors c'est le meilleur moyen.

Questions connexes