web-dev-qa-db-fra.com

GET vs POST, qui est plus sûr?

J'ai entendu parler de la différence programmatique n/b GET et POST dans les applications Web. En demandant par curiosité qui est plus sécurisée, la méthode GET ou la méthode POST dans les applications web, j'attends aussi des réponses en termes de protocoles (ie dans http et https)?

POST est plus sécurisé que GET pour plusieurs raisons.

Les paramètres GET sont transmis via URL. Cela signifie que les paramètres sont stockés dans les journaux du serveur et l'historique du navigateur. Lorsque vous utilisez GET, il est très facile de modifier également les données soumises par le serveur, car elles sont juste là dans la barre d'adresse pour jouer.

Le problème lors de la comparaison de la sécurité entre les deux est que POST peut dissuader l'utilisateur occasionnel, mais ne fera rien pour arrêter quelqu'un avec une intention malveillante. Il est très facile de simuler POST demandes, et ne doit pas faire entièrement confiance.

Le plus gros problème de sécurité avec GET n'est pas l'intention malveillante de l'utilisateur final, mais l'envoi par un tiers d'un lien vers l'utilisateur final. Je ne peux pas vous envoyer un lien qui forcera une demande POST, mais je peux très certainement vous envoyer un lien avec une demande GET malveillante.

Cliquez ici pour les meilleurs films gratuits!

Éditer:

Je voulais juste mentionner que vous devriez probablement utiliser POST pour la plupart de vos données. Vous ne voudriez utiliser GET que pour les paramètres qui devraient être partagés avec d'autres, par exemple: /viewprofile.php?id = 1234, /googlemaps.php?lat=xxxxxxx&lon=xxxxxxx

28
David Houde

POST place simplement les informations dans un endroit différent (corps du message de demande) que GET (url). Certaines personnes ont l'impression que ce dernier expose plus d'informations, ce qui est vrai pour certains points (lire dans l'édition). À partir d'un point où un attaquant voudrait intercepter votre trafic, POST serait aussi difficile/facile pour un attaquant que pour un GET.

Si vous souhaitez la sécurité afin que votre demande ne soit pas exposée lorsqu'elle quitte les points de fin et de début, utilisez SSL (https).

MODIFIER

Un point valide de Gumbo et Ladadada, l'enregistrement des demandes GET peut se produire plus fréquemment que POST requêtes. Par exemple dans l'historique d'un navigateur (si vous partagez ce navigateur avec quelqu'un d'autre).

Cela signifie donc que vous ne devez pas placer de données sensibles dans une demande GET car une demande GET pourrait être exposée à des personnes qui surveillent l'écran.

7
Lucas Kauffman

Comme @Gumbo dit que les URL sont enregistrées et apparaissent dans plus d'endroits, les requêtes GET sont donc un peu plus précaires que les requêtes [POST). Le fait est que beaucoup de gens pensent que les requêtes POST sont beaucoup plus sécurisées que les requêtes GET car elles peuvent voir les données directement dans l'URL mais en utilisant, par exemple, un logiciel proxy qui intercepte les requêtes de navigateur, n'importe qui peut afficher et modifier les données POST.

Un autre point est que vous devez penser où utilisez-vous GET et POST parce que GET ne doit être utilisé que pour les opérations qui ne modifient pas les informations de la base de données, ne demande ou ne lit que les informations et POST les données doivent être utilisées lorsque les données vont être modifiées. Certains scanners Web cliquent sur chaque lien automatiquement (généralement les demandes GET) et non dans les boutons ou les formulaires (généralement les demandes POSTS) en évitant de modifier la base de données, mais si, par exemple, vous mettez une opération de suppression après un lien, vous risquez de cliquer sur le lien par des outils plus automatisés plus facilement.

De toute évidence, les scanners Web peuvent également "cliquer" ou suivre des boutons et des formulaires, mais ils se différencient généralement et ce comportement peut être modifié pour contrôler le Web en toute sécurité.

0
kinunt