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.
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