Publication non sécurisée à partir d'un contrôle asp.net sur une page sécurisée tout en évitant l'authentification

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

  •  03-07-2019
  •  | 
  •  

Question

Nous utilisons une authentification par formulaire asp.net standard. Certaines pages nécessitent qu'un utilisateur soit connecté; et au moins certaines de ces pages sont livrées par https. Il y a un contrôle de recherche en haut de chaque page. Lorsque ceci est utilisé, nous ne nous soucions pas de savoir si la session de l'utilisateur a expiré, même si la page en cours nécessite une connexion.

Cependant, actuellement, lors de la recherche, l'authentification par formulaire intégré voit que la page en cours de publication requiert une authentification et redirige l'utilisateur vers la page de connexion, avec la page précédente, pas la page de résultats de recherche en tant que référent.

Quel est le meilleur moyen de contourner la sécurité ici? J'ai envisagé de publier sur une page différente à l'aide de la propriété PostBackUrl, mais s'il ne s'agit pas de https, vous obtenez le " vous publiez des données sur une connexion non sécurisée " message que les utilisateurs n'aiment pas.

Merci pour toute aide.

Modifier: merci Nick pour votre suggestion d’utiliser GET sur la page de recherche. Nous le faisons déjà, mais la chaîne de requête est construite par le contrôle d'entrée de recherche puis redirige. Comment pouvons-nous construire la chaîne de requête sans utiliser de publication? (Évidemment, javascript est une option, mais j’espérais trouver un mécanisme alternatif.)

Était-ce utile?

La solution 3

Comme suggéré dans d'autres réponses, la manière la plus correcte de procéder consiste à placer le contrôle d'entrée de recherche dans un formulaire séparé comportant une méthode get et une action searchearch.aspx. Cependant, cela est difficile avec aspx car vous ne pouvez avoir qu'un seul formulaire côté serveur sur une page.

En fin de compte, la solution à laquelle j’ai abouti, qui fonctionne très bien, a été d’avoir un HttpModule qui détecte si la "recherche" On avait cliqué sur le bouton (en cherchant si un paramètre avec son identifiant existait), puis construit une chaîne de requête en recherchant les paramètres de critères et redirigé vers la page de résultats de recherche. Cela signifie que tous les modules d'authentification / autorisation sont ignorés car nous avons déjà appelé une redirection vers la page de résultats de recherche (non sécurisée) avant qu'ils ne soient déclenchés.

C'est un peu fragile mais pour nous ça marche très bien.

Autres conseils

Pour la page de recherche, vous voulez vous assurer que la recherche est effectuée via une requête GET. (c’est-à-dire google avec le "q" dans la chaîne de requête) Il est fort probable que vous effectuiez un POST.

Alors changez votre

<form method="post" ...>

à

<form method="get" ...>

La plus grande erreur que commettent la plupart des développeurs avec les pages de recherche est de publier une publication. HTTP a été conçu pour effectuer des requêtes ou des recherches dans la chaîne de requête (donc le nom), et pour obtenir un formulaire à publier dans une chaîne de requête au lieu du corps, vous devez utiliser un " GET " méthode. Ainsi, tout appareil de recherche peut utiliser votre page de recherche, même le champ de recherche des navigateurs.

Deuxièmement, vous souhaitez créer une configuration de l'emplacement pour vous page de recherche. Vous ajoutez ceci à votre web.config.

<location path="my-search-page.aspx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

Cela crée un remplacement spécial pour cette page et tout ce qui se trouve dans la balise d'emplacement utilise exactement la même structure web.config pour remplacer le fichier web.config.

Vous souhaitez répéter cette opération pour chaque page que vous souhaitez autoriser tous les utilisateurs.

Si la page de résultats de recherche effectue une publication, l'événement pageload sera déclenché avant que le bouton de recherche ne soit cliqué.

Ainsi, si la page sur laquelle ils se trouvent nécessite un login, cette commande sera exécutée avant que le bouton de recherche ne clique sur l'événement pour les renvoyer à l'écran de connexion.

Il existe plusieurs façons de transformer la recherche en un formulaire HTML normal et de lui donner un résultat GET, pas un message POST, et mentionné par "Nick"

.

Si toute la page se trouve dans un formulaire de publication .net, vous devrez ajouter l’événement du bouton de recherche à une surcharge du chargement de la page afin qu’elle se déclenche en premier.

Ce site a un bon article sur la page comme cycle et ses substitutions. http://www.15seconds.com/issue/020102.htm

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