asp.net utilisation requireSSL et toujours être en mesure de vérifier si l'utilisateur est authentifié sur les pages non-SSL

StackOverflow https://stackoverflow.com/questions/4546682

Question

J'ai un webapplication (asp.net 3.5) avec SSL mixte. Toutes les pages compte connexes sont fournis via SSL. La plupart du temps toutes les autres pages sont livrés sur non-ssl. Pour basculer automatiquement entre HTTPS et HTTP j'utilise ce composant. Ces derniers temps il y avait un élément de nouvelles concernant la capacité toch pirater les sessions utilisateur sur les réseaux Wifi non sécurisés. Cela devrait être possible en attrapant le cookie qui est transmis sur les connexions non ssl.

Cela me déclenché pour revoir mes choix de sécurité dans ce webapplication. Je suis (encore une fois) cet article de MSDN et essayé le requireSSL = true sur mon FormsAuthentication. Avant que j'ai même commencé le webapplication je me suis aperçu que mon User.Identity sera nulle sur les pages non-SSL, car le cookie contenant ces informations ne sont pas envoyées depuis et vers le navigateur Web.

je besoin d'un mécanisme qui authentifie l'utilisateur via une connexion SSL ... et se souvient de cette information d'authentification, même sur des pages non-SSL.

Alors que la recherche, j'ai trouvé ce message . Il me semble que ce soit une bonne solution. Mais, je me demande si une solution peut être trouvée dans le stockage d'informations de connexion dans le sessionstate? Je pense à attraper le Application_AuthenticateRequest dans le Global.asax. Vérifier si la connexion est sécurisée et vérifier soit la authcookie ou session. Je ne sais pas exactement comment je vais mettre en œuvre ce encore. Peut-être que vous pouvez penser avec moi à ce sujet?

Était-ce utile?

La solution

Malheureusement, vous avez des exigences contradictoires. Vous ne pouvez pas avoir une session sécurisée sur non-SSL, donc je voudrais remettre en question votre hypothèse sous-jacente: pourquoi ne pas avoir l'ensemble du site l'utilisation SSL

Autres conseils

De la MVC FAQ (question similaire répondu par le gourou de la sécurité Levi) demandant un attribut de ne pas utiliser SSL.

• Les [RequireHttps] attribut peut être utilisé sur un type de contrôleur ou d'une méthode d'action pour dire « ce ne sont accessibles que via SSL. » Les demandes non SSL au contrôleur ou une action seront redirigés vers la version SSL (si une requête HTTP GET) ou rejeté (si un HTTP POST). Vous pouvez remplacer le RequireHttpsAttribute et modifier ce comportement si vous le souhaitez. Il n'y a pas [RequireHttp] attribut intégré qui fait le contraire, mais vous pouvez facilement faire votre propre si vous souhaitez.

Il existe aussi des surcharges de Html.ActionLink () qui prend un paramètre de protocole; vous pouvez spécifier explicitement « http » ou « https » comme protocole. Voici la documentation MSDN sur une telle surcharge. Si vous ne spécifiez pas de protocole ou si vous appelez une surcharge qui ne dispose pas d'un paramètre de protocole, il est supposé que vous vouliez le lien pour avoir le même protocole que la demande actuelle.

La raison pour laquelle nous n'avons pas [RequireHttp] attribut dans MVC est qu'il n'y a pas vraiment avantage beaucoup à elle. Ce n'est pas aussi intéressant que [RequireHttps], et il encourage les utilisateurs à faire la mauvaise chose. Par exemple, de nombreux sites web logger via SSL et rediriger HTTP après que vous êtes connecté, ce qui est tout à fait la mauvaise chose à faire. Votre cookie de connexion est tout aussi secrète que votre nom d'utilisateur + mot de passe, et maintenant que vous envoyez dans le fil clair à travers. D'ailleurs, vous avez déjà pris le temps d'effectuer la poignée de main et sécuriser le canal (qui est la plus grande partie de ce qui rend plus lent que HTTPS HTTP) avant que le pipeline MVC est exécuté, donc [RequireHttp] ne fera pas la demande actuelle ou future demande beaucoup plus rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top