Request.UrlReferrer null?

Dans une page aspx C # .NET (j’utilise Framework v3.5), j’ai besoin de savoir d’où vient l’utilisateur car il ne peut pas afficher les pages sans se connecter. Si j’ai la page A (la page que l’utilisateur souhaite afficher), redirige à la page B (la page de connexion), l’object Request.UrlReferrer est null.

Arrière-plan: Si un utilisateur n’est pas connecté, je redirige vers la page de connexion ( B dans ce scénario). Après la connexion, je voudrais les ramener à la page demandée avant de les forcer à se connecter.

METTRE À JOUR:
Une bonne solution rapide semble être:
//if user not logged in Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
Ensuite, il suffit de regarder QuerySsortingng sur la page de connexion à laquelle vous les avez obligés et de placer l’utilisateur là où il se trouvait après la connexion réussie.

Si vous utilisez le fournisseur d’adhésion standard et définissez l’autorisation pour le répertoire / la page, le code définira automatiquement un paramètre de requête de ReturnUrl et sera redirigé après une connexion réussie.

Si vous ne souhaitez pas utiliser le modèle de fournisseur d’appartenance, je vous suggérerais également de définir manuellement le paramètre de chaîne de requête. Les référents HTTP ne sont pas très fiables.

UrlReferrer est basé sur l’en – tête HTTP_REFERER qu’un navigateur doit envoyer. Mais, comme pour toutes les choses laissées au client, cela varie.

Je sais que certaines suites “de sécurité” (comme Internet Security de Norton) vont supprimer cet en-tête, convaincu que cela facilite le suivi du comportement des utilisateurs. Aussi, je suis sûr qu’il y a des extensions Firefox pour faire la même chose.

En bout de ligne, vous ne devriez pas y faire confiance. Il suffit d’append l’URL à la chaîne GET et de redirect en fonction de cela.

UPDATE: Comme mentionné dans les commentaires, il est probablement judicieux de limiter la redirection du paramètre GET à un travail uniquement pour les liens relatifs sans domaine, les modèles de répertoires refusés (../), etc. Si vous suivez la règle standard “n’utilisez pas aveuglément une entrée fournie par l’utilisateur”, vous devriez être en sécurité.

Le problème pourrait être lié à la façon dont vous redirigez l’utilisateur vers une autre page. Quoi qu’il en soit, l’URL du référent n’est rien que vous devriez prendre comme règle absolue – un client peut le simuler facilement.

Ce que vous recherchez se fait mieux avec une variable de chaîne de requête (par exemple, returnURL ou originURL). Le référent est le mieux utilisé pour les opérations d’exploration de données car il est très peu fiable.

Voir la manière dont ASP.Net effectue la redirection avec les connexions pour un exemple.