J'ai actuellement un lien de connexion sur mon application qui ressemble à ceci:ReturnUrl dans ASP.NET MVC
<a href="/login?ReturnUrl=" + <%= Request.RawUrl %>>Login</a>
Je veux gérer la commande POST sur la page de connexion dans l'action du contrôleur ci-dessous:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(string returnUrl)
{
// Authenticate user
return Redirect(returnUrl);
}
le problème ici est de savoir si le RawUrl est quelque chose avec plusieurs paramètres d'URL comme « somepage? param1 = 1 & param2 = 2 & param3 = 3 », le returnUrl qui est passé dans l'action de connexion est tronquée après la première esperluette: "une page? p aram1 = 1 ".
J'ai essayé UrlEncoding RawUrl mais cela semble faire une différence. Il semble que le framework ASP.NET MVC est ici UrlDecoding les paramètres url avant de les mapper aux paramètres d'action du contrôleur, ce qui finit par enlever les paramètres d'URL supplémentaires que je veux voir dans mon paramètre returnUrl.
Y a-t-il un moyen de contourner ce problème? Je sais que je pourrais juste utiliser Request.Path et analyser les valeurs dont j'ai besoin, mais j'ai pensé que je verrais d'abord s'il y avait une approche plus propre.
C'est bon; PathAndQuery n'inclut pas le domaine, donc vous n'êtes pas vulnérable à un attaquant utilisant votre serveur pour rediriger vers leur site. – Will
Je ne dirais pas que vous n'êtes pas vulnérable. Les gens peuvent changer les données de formulaire avec Fiddler et autres. Vous devez toujours nettoyer l'URI sur le serveur. D'un autre côté, il est bon de ne pas pré-remplir le formulaire avec de mauvaises données. :) –
Ça a l'air bien. Attention cependant que 'ViewContext.HttpContext.Request.Url' peut retourner null, ce qui signifie que vous pouvez avoir une' NullReferenceException'. –