ASP .NET Core MVC – Se protéger contre les attaques de redirection

Le contexte
Les attaques de redirection sont une vulnérabilité connue des hackers. Elles consistent à rediriger les utilisateurs d’un site Web vers un autre site Web malveillant, généralement dans le but d’obtenir des informations (attaque par phishing) personnelles et confidentielles.
Comment est-ce possible ? Partons du principe que votre application prend en charge l’url « http://www.monApp.fr/Securite/Connexion?returnUrl=/Produit/List », afin de rediriger les utilisateurs vers une vue affichant la liste des produits après s’être authentifié. Si un hacker a connaissance de cette règle qui est visible en observant les Urls dans une page Web, alors il peut envoyer aux utilisateurs de l’application un mail avec une URL du type http://www.monApp.fr/Securite/Connexion?returnUrl=http://www.autreSiteWeb.fr. Ainsi lorsque l’utilisateur clique sur ce lien, alors il est redirigé vers la page de connexion du site Web qu’il connait. Puis après s’être authentifié, il est redirigé vers le site Web du hacker qui ressemble fortement au site Web hacké. Etant donné que l’utilisateur s’est authentifié et n’a pas conscience qu’il est sur un autre site Web, il est confiant pour fournir des informations que le hacker pourra collecter et utiliser.

Les solutions
Dans les actions des contrôleurs, lorsque vous effectuez des redirections avec des informations provenant du client, vous avez deux possibilités :

  • Première possibilité : utiliser la méthode de redirection LocalRedirect :
    public IActionResult Register(string aUrl)
    {
        return this.LocalRedirect(aUrl);
    }

    La méthode LocalRedirect lève une exception si l’URL ne redirige pas vers une vue de l’application.

  • Seconde possibilité : utiliser Url.IsLocalUrl :
    private IActionResult Register(string aUrl)
    {
        if (Url.IsLocalUrl(aUrl))
        {
            return Redirect(aUrl);
        }
        else
        {
            return RedirectToAction(nameof(HomeController.Index), "Home");
        }
    }

    Si l’Url passée en paramètre ne redirige pas vers une vue de l’application, alors l’utilisateur est redirigé vers l’action Index du contrôleur Home. Les redirections vers d’autres sites Web sont bloquées.

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j’alterne les missions de formation et d’ingénierie avec cette plateforme. J’écris ce blog pour transmettre mes connaissances à tout développeur, qu’il soit débutant ou expérimenté.