Je crée une API Web sécurisée qui utilise HTTPS; cependant, si j'autorise les utilisateurs à le configurer (y compris l'envoi du mot de passe) à l'aide d'une chaîne de requête, cela sera-t-il également sécurisé ou devrais-je le forcer à le faire via un POST?
ssl
https
query-string
John
la source
la source
History caches in browsers
ou ajouter une référence pour ir?Du point de vue de "renifler le paquet réseau", une demande GET est sûre, car le navigateur établira d'abord la connexion sécurisée puis enverra la demande contenant les paramètres GET. Mais les URL GET seront stockées dans l'historique du navigateur de l'utilisateur / saisie semi-automatique, ce qui n'est pas un bon endroit pour stocker, par exemple, les données de mot de passe. Bien sûr, cela ne s'applique que si vous prenez la définition plus large de "Webservice" qui pourrait accéder au service à partir d'un navigateur, si vous n'y accédez qu'à partir de votre application personnalisée, cela ne devrait pas poser de problème.
Il est donc préférable d'utiliser post au moins pour les boîtes de dialogue de mot de passe. De plus, comme indiqué dans le lien que littlegeek a publié, une URL GET est plus susceptible d'être écrite dans les journaux de votre serveur.
la source
La raison en est que les chaînes de requête font partie du protocole HTTP qui est un protocole de couche application, tandis que la partie sécurité (SSL / TLS) provient de la couche transport. La connexion SSL est d'abord établie, puis les paramètres de requête (qui appartiennent au protocole HTTP) sont envoyés au serveur.
Lors de l'établissement d'une connexion SSL, votre client effectuera les étapes suivantes dans l'ordre. Supposons que vous essayez de vous connecter à un site nommé example.com et que vous souhaitez envoyer vos informations d'identification à l'aide des paramètres de requête. Votre URL complète peut ressembler à ceci:
example.com
en adresse IP à l'(124.21.12.31)
aide d'une demande DNS. Lors de l'interrogation de ces informations, seules les informations spécifiques au domaine sont utilisées, c'est-à-dire que seulesexample.com
seront utilisées.124.21.12.31
et tentera de se connecter au port 443 (le port de service SSL n'est pas le port HTTP 80 par défaut).example.com
enverra ses certificats à votre client.Par conséquent, vous n'exposerez pas de données sensibles. Cependant, l'envoi de vos informations d'identification via une session HTTPS à l'aide de cette méthode n'est pas le meilleur moyen. Vous devriez opter pour une approche différente.
la source
(e.g http://example.com/login?username=alice&password=12345)
.Oui. Le texte entier d'une session HTTPS est sécurisé par SSL. Cela inclut la requête et les en-têtes. À cet égard, un POST et un GET seraient exactement les mêmes.
En ce qui concerne la sécurité de votre méthode, il n'y a pas de véritable moyen de dire sans inspection appropriée.
la source
SSL se connecte d'abord à l'hôte, donc le nom d'hôte et le numéro de port sont transférés en texte clair. Lorsque l'hôte répond et que le défi réussit, le client crypte la requête HTTP avec l'URL réelle (c'est-à-dire quoi que ce soit après la troisième barre oblique) et l'envoie au serveur.
Il existe plusieurs façons de briser cette sécurité.
Il est possible de configurer un proxy pour agir comme un "homme au milieu". Fondamentalement, le navigateur envoie la demande de connexion au serveur réel au proxy. Si le proxy est configuré de cette façon, il se connectera via SSL au serveur réel mais le navigateur parlera toujours au proxy. Ainsi, si un attaquant peut accéder au proxy, il peut voir toutes les données qui le traversent en texte clair.
Vos demandes seront également visibles dans l'historique du navigateur. Les utilisateurs pourraient être tentés de mettre le site en signet. Certains utilisateurs ont installé des outils de synchronisation de signets, de sorte que le mot de passe pourrait se retrouver sur deli.ci.us ou un autre endroit.
Enfin, quelqu'un a peut-être piraté votre ordinateur et installé un enregistreur de clavier ou un grattoir d'écran (et beaucoup de virus de type cheval de Troie le font). Étant donné que le mot de passe est visible directement sur l'écran (par opposition à "*" dans une boîte de dialogue de mot de passe), c'est un autre trou de sécurité.
Conclusion: en matière de sécurité, comptez toujours sur les sentiers battus. Il y a trop de choses que vous ne savez pas, auxquelles vous ne penserez pas et qui vous briseront le cou.
la source
Oui, tant que personne ne regarde par-dessus votre épaule vers le moniteur.
la source
Je ne suis pas d'accord avec l'énoncé sur la fuite [...] de référents HTTP (une image externe dans la page cible pourrait divulguer le mot de passe) dans la réponse de Slough .
La RFC HTTP 1.1 indique explicitement :
Quoi qu'il en soit, les journaux du serveur et l'historique du navigateur sont des raisons plus que suffisantes de ne pas placer de données sensibles dans la chaîne de requête.
la source
Oui, à partir du moment où vous établissez une connexion HTTPS, tout est sécurisé. La chaîne de requête (GET) en tant que POST est envoyée via SSL.
la source
Vous pouvez envoyer un mot de passe en tant que paramètre de hachage MD5 avec du sel ajouté. Comparez-le côté serveur pour l'authentification.
la source