Quelle est la différence lors de l'utilisation GET
ou de la POST
méthode? Lequel est le plus sûr? Quels sont les (dés) avantages de chacun d'eux?
Quelle est la différence lors de l'utilisation GET
ou de la POST
méthode? Lequel est le plus sûr? Quels sont les (dés) avantages de chacun d'eux?
Réponses:
Ce n'est pas une question de sécurité. Le protocole HTTP définit les requêtes de type GET comme étant idempotentes , tandis que les POST peuvent avoir des effets secondaires. En clair, cela signifie que GET est utilisé pour afficher quelque chose, sans le changer, tandis que POST est utilisé pour changer quelque chose. Par exemple, une page de recherche doit utiliser GET, tandis qu'un formulaire qui modifie votre mot de passe doit utiliser POST.
Notez également que PHP confond un peu les concepts. Une demande POST obtient une entrée à partir de la chaîne de requête et via le corps de la demande. Une requête GET obtient juste une entrée de la chaîne de requête. Ainsi, une demande POST est un sur-ensemble d'une demande GET; vous pouvez utiliser $_GET
dans une requête POST, et il peut même être judicieux d'avoir des paramètres avec le même nom dans $_POST
et $_GET
cela signifie des choses différentes.
Par exemple, supposons que vous ayez un formulaire pour modifier un article. L'ID d'article peut être dans la chaîne de requête (et donc disponible via $_GET['id']
), mais disons que vous souhaitez modifier l'ID d'article. Le nouvel identifiant peut alors être présent dans le corps de la demande ( $_POST['id']
). OK, ce n'est peut-être pas le meilleur exemple, mais j'espère que cela illustre la différence entre les deux.
Lorsque l'utilisateur saisit des informations dans un formulaire et clique sur Envoyer, les informations peuvent être envoyées du navigateur au serveur de deux manières: dans l'URL ou dans le corps de la demande HTTP.
La méthode GET, utilisée dans l'exemple précédent, ajoute des paires nom / valeur à l'URL. Malheureusement, la longueur d'une URL est limitée, donc cette méthode ne fonctionne que s'il n'y a que quelques paramètres. L'URL peut être tronquée si le formulaire utilise un grand nombre de paramètres ou si les paramètres contiennent de grandes quantités de données. De plus, les paramètres transmis à l'URL sont visibles dans le champ d'adresse du navigateur et non le meilleur endroit pour afficher un mot de passe.
L'alternative à la méthode GET est la méthode POST. Cette méthode regroupe les paires nom / valeur dans le corps de la requête HTTP, ce qui permet une URL plus propre et n'impose aucune limitation de taille sur la sortie des formulaires. Il est également plus sûr.
La meilleure réponse a été la première.
Vous utilisez:
GET
est parfaitement capable d'envoyer des données aussi, donc ce n'est pas une réponse très précise.
Il y a deux implications communes de «sécurité» à l'utilisation GET
. Étant donné que les données apparaissent dans la chaîne d'URL, il se peut que quelqu'un qui regarde par-dessus votre épaule dans la barre d'adresse / URL puisse voir quelque chose auquel il ne devrait pas avoir accès, comme un cookie de session qui pourrait potentiellement être utilisé pour détourner votre session. Gardez à l'esprit que tout le monde a des téléphones-appareils photo.
L'autre implication de sécurité GET
concerne les GET
variables enregistrées dans la plupart des journaux d'accès des serveurs Web dans le cadre de l'URL demandeuse. Selon la situation, le climat réglementaire et la sensibilité générale des données, cela peut potentiellement susciter des inquiétudes.
Certains clients / pare-feu / systèmes IDS peuvent désapprouver les GET
demandes contenant une quantité excessive de données et peuvent donc fournir des résultats peu fiables.
POST
prend en charge des fonctionnalités avancées telles que la prise en charge de l'entrée binaire en plusieurs parties utilisée pour les téléchargements de fichiers sur les serveurs Web.
POST
nécessite un en-tête de longueur de contenu qui peut augmenter la complexité d'une implémentation client spécifique à l'application, car la taille des données soumises doit être connue à l'avance pour empêcher qu'une demande client ne soit formée dans un mode incrémentiel à passage unique. Peut-être un problème mineur pour ceux qui choisissent d'abuser HTTP
en l'utilisant comme transport RPC (Remote Procedure Call).
D'autres ont déjà fait un bon travail en couvrant les différences sémantiques et la partie «quand» de cette question.
J'utilise GET lorsque je récupère des informations d' une URL et POST lorsque j'envoie des informations vers une URL.
Vous devriez utiliser POST s'il y a beaucoup de données ou trier des informations sensibles (les choses vraiment sensibles ont également besoin d'une connexion sécurisée).
Utilisez GET si vous souhaitez que les utilisateurs puissent mettre votre page en signet, car toutes les données sont incluses avec le signet.
Faites juste attention aux personnes qui frappent REFRESH avec la méthode GET, car les données seront envoyées à nouveau à chaque fois sans avertir l'utilisateur (POST avertit parfois l'utilisateur de renvoyer des données).
Ce document du W3C explique l'utilisation de HTTP GET et POST.
Je pense que c'est une source faisant autorité.
Le résumé est (section 1.3 du document):
- Utilisez GET si l'interaction ressemble plus à une question (c'est-à-dire qu'il s'agit d'une opération sûre telle qu'une requête, une opération de lecture ou une recherche).
- Utilisez POST si:
- L'interaction ressemble plus à une commande, ou
- L'interaction modifie l'état de la ressource d'une manière que l'utilisateur percevrait (par exemple, un abonnement à un service), ou
- L'utilisateur doit être tenu responsable des résultats de l'interaction.
Les méthodes Get et Post n'ont rien à voir avec la technologie de serveur que vous utilisez, elles fonctionnent de la même manière sur php, asp.net ou ruby. GET et POST font partie du protocole HTTP. Comme l'a noté Mark, POST est plus sécurisé. Les formulaires POST ne sont pas non plus mis en cache par le navigateur. POST est également utilisé pour transférer de grandes quantités de données.
La raison d'utiliser POST lors de la modification des données:
De plus, ne mettez pas d'informations sensibles dans la chaîne de requête (uniquement option avec GET) car elles apparaissent dans la barre d'adresse, les signets et les journaux du serveur.
J'espère que cela explique pourquoi les gens disent que le POST est «sécurisé». Si vous transmettez des données sensibles, vous devez utiliser SSL.
GET
et POST
sont des méthodes HTTP qui peuvent atteindre des objectifs similaires
GET
est essentiellement pour obtenir (récupérer) des données, A GET
ne devrait pas avoir de corps, donc à part les cookies, le seul endroit pour transmettre des informations est dans l'URL et les URL sont de longueur limitée, GET
sont moins sécurisées que POST
parce que les données envoyées font partie de l'URL
Ne jamais utiliser GET
lors de l'envoi de mots de passe, de carte de crédit ou d'autres informations sensibles !, Les données sont visibles par tous dans l'URL, peuvent être des données mises en cache.
GET
est inoffensif lorsque nous rechargeons ou rappelons le bouton, il sera marqué d'un livre, les paramètres restent dans l'historique du navigateur, seuls les caractères ASCII sont autorisés.
POST
peut impliquer quoi que ce soit, comme le stockage ou la mise à jour des données, ou la commande d'un produit, ou l'envoi d'e-mails. POST
méthode a un corps.
POST
La méthode est sécurisée pour transmettre des informations sensibles et confidentielles au serveur, elle ne sera pas visible dans les paramètres de requête dans l'URL et les paramètres ne sont pas enregistrés dans l'historique du navigateur. Il n'y a aucune restriction sur la longueur des données. Lorsque nous rechargeons, le navigateur doit avertir l'utilisateur que les données sont sur le point d'être soumises à nouveau. POST
la méthode ne peut pas être mise en signet
Utilisez la méthode GET si vous souhaitez récupérer les ressources de l'URL. Vous pouvez toujours voir la dernière page si vous appuyez sur le bouton de retour de votre navigateur, et elle peut être mise en signet, elle n'est donc pas aussi sécurisée que la méthode POST.
Utilisez la méthode POST si vous souhaitez «soumettre» quelque chose à l'URL. Par exemple, vous souhaitez créer un compte Google et vous devrez peut-être remplir toutes les informations détaillées, puis vous appuyez sur le bouton «Soumettre» (la méthode POST est appelée ici), une fois que vous avez soumis avec succès, et essayez d'appuyer sur le bouton de retour de votre navigateur , vous obtiendrez une erreur ou un nouveau formulaire vierge, au lieu de la dernière page avec le formulaire rempli.
La GET
méthode:
Il est utilisé uniquement pour envoyer une date de 256 caractères
Lorsque vous utilisez cette méthode, les informations peuvent être consultées sur le navigateur
C'est la méthode par défaut utilisée par les formulaires
Ce n'est pas si sûr.
La POST
méthode:
Il est utilisé pour envoyer des données illimitées.
Avec cette méthode, les informations ne sont pas visibles sur le navigateur
Vous pouvez mentionner explicitement la POST
méthode
Il est plus sécurisé que la GET
méthode
Il fournit des fonctionnalités plus avancées