8768 sujets

Développement web côté serveur, CMS

Encore une petite question en PHP au sujet de GET et POST.

Ces deux actions, utilisées dans les formulaires HTML, servent à envoyer les données pour vérification et traitements, soit par l'intermédiaire de la barre URL (GET), soit de façon confidentielle (POST). La méthode POST est surtout utilisée pour envoyer des données volumineuses, des données sensibles ou encore des fichiers de type doc, pdf, ou autres jpg.

Mais je me pose la question suivante : est-ce que ces deux méthodes sont sorties en même temps dès le début ou alors c'est d'abord la méthode GET qui es sortie et plus tard, quand on s'est rendu compte qu'il fallait en partie sécuriser l'envoie des données (mots de passe, n° de cartes bancaires, etc.), envoyer des données massives (sondages, questionnaires, etc.), ou encore envoyer des fichiers, qu'on a sorti la méthode POST vu que GET ne permettait pas de sécuriser l'envoie de données, envoyer des données volumineuses ou envoyer des fichiers.

J'ai cherché sur le web et je n'ai trouvé aucune information dans ce sens.
Modifié par ObiJuanKenobi (12 Apr 2022 - 15:55)
Salut,

La méthode POST ne permet absolument pas de sécuriser l’envoi des données et n’a donc pas été définie dans ce but. Tout comme les autres méthodes, elle a été définie dans le protocole HTTP pour répondre à d’autres besoins.

Plus d’explications ici : https://developer.mozilla.org/fr/docs/Web/HTTP/Methods
Modifié par Anymah (12 Apr 2022 - 16:16)
Salut,

tu as l'historique du protocole HTTP ici : https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol

Cela semble indiqué que d'un point de vue historique, il y a GET en version 0.9 puis POST en version 1.0

A priori, le POST n'est pas "confidentiel", c'est juste moins visuel pour l'utilisateur que la barre d'URL.

Le coté "confidentiel" est plutôt lié au passage du protocole HTTP vers HTTPS qui permet de sécuriser la connexion (ce qui empêche des gens de voler tes paquets pour obtenir les informations confidentielles contenus)
je rejoins les copains, rien n'est vraiment confidentiel dans l'informatique Smiley banane

c'est pour ça qu'il existe tout un tas de fonctions permettant de sécuriser les données que tu reçois
Modérateur
Bonjour,

Mathieuu a écrit :
Le coté "confidentiel" est plutôt lié au passage du protocole HTTP vers HTTPS qui permet de sécuriser la connexion (ce qui empêche des gens de voler tes paquets pour obtenir les informations confidentielles contenus)


On peut préciser qu'effectivement, c'est le passage de http vers https qui sécurise (contre certaines attaques). Mais ça n'empêche pas le vol. Ça le rend juste inutile (plus ou moins) parce que les données sont cryptées.

Amicalement,
Merci pour toutes vos explications et je comprends que la méthode POST ne sécurise pas réellement les données (c'est le HTTPS qui sécurise vraiment parce que les données sont cryptées). Elle permet juste de ne pas envoyer les valeurs des variables dans la barre URL ce qui empêche les internautes indélicats de modifier quoi que se soit. Cependant, j'aimerai que vous me confirmiez si cette méthode de travail est bonne ou pas.

D'une manière générale, lorsque le formulaire est en cours de développement, il faut utiliser la méthode GET parce qu'il sera plus facile de vérifier son fonctionnement notamment grâce à la lecture des valeurs de variables passées dans la barre URL. Ensuite, une fois les vérifications faites, on peut passer à la méthode POST afin de ne pas afficher les valeurs dans la barre URL pour quelles ne puissent pas être éventuellement modifiées par l'utilisateur.

Cependant quid du moteur de recherche Google qui utilise la méthode GET étant donné qu'on voit le plus souvent les valeurs des variables dans la barre URL ?

Et pour finir, cela à l'air sacrément compliqué de sécuriser son site web !
Modifié par ObiJuanKenobi (13 Apr 2022 - 07:55)
Salut,

je ne pense pas que cela soit une bonne idée de faire du get en dev puis du post en prod Smiley ohwell , cela va t'obliger à écrire du code en double pour passer de $_GET à $_POST (ou d'utiliser $_REQUEST mais en prenant soin de bien configurer l'ordre des variables en cas de doublon dans $_POST et $_GET)

Perso j'ai tendance à faire du "get" sur les traitements qui vont faire des "select" (pour être précis : on passe les paramètres du where du select en get)
Genre ici sur le forum https://forum.alsacreations.com/topic-20-89483-1.html l'url est re écrite, mais on peut deviner qu'il y a du get qui est fait sur le 20 le 89483 et le 1
En les laissant visibles on permet à l'utilisateur de :
- pouvoir sauvegarder l'URL pour accéder directement à la page
- se déplacer facilement dans le site en changeant certains paramètres de l'URL

Pour tout le reste je dirais du post et ça roule Smiley lol
Est-il possible d'utiliser les deux méthodes en même temps sur le même formulaire, genre comme ça (je n'ai pas testé) :

<form action="traitement.php" méthode ="get" méthode="post">
</form>

Puis dans le traitement en PHP utiliser les deux variables externes $_GET et $_POST ?
Modifié par ObiJuanKenobi (13 Apr 2022 - 09:59)
Non tu ne peux indiquer qu'un seul format. Pour faire les 2 il faut faire le get via l'action et le post via method

Fichier test.php :

<form action="test2.php?tata_get=tata&toto_post=rempli_via_get" method="post">
<input type="text" name="toto_post"/>
<input type="submit"/>
</form>



Fichier test2.php :

<?php

echo "POST : <br/>";
echo "<pre>";
var_dump ($_POST);
echo "</pre>";


echo "GET : <br/>";
echo "<pre>";
var_dump($_GET);
echo "</pre>";


echo "REQUEST : <br/>";
echo "<pre>";
var_dump($_REQUEST);
echo "</pre>";


Résultat qui s'affiche sur si on saisi "test" dans le input text


POST :

array(1) {
  ["toto_post"]=>
  string(4) "test"
}

GET :

array(2) {
  ["tata_get"]=>
  string(4) "tata"
  ["toto_post"]=>
  string(14) "rempli_via_get"
}

REQUEST :

array(2) {
  ["tata_get"]=>
  string(4) "tata"
  ["toto_post"]=>
  string(4) "test"
}



On voit que par défaut chez moi dans $_request c'est la valeur du $_post qui prend le dessus sur celui de $_get
C'est compliqué pour moi ce moyen, ej en maîtrise pas le développement en PHP, je ne suis que débutant depuis un peu plus de 2 semaines.
La plus part du temps tu feras l'un ou l'autre, rarement les 2, c'était juste pour répondre à ta question que oui c'est possible mais pas de la manière dont tu l'indiques.

Et du coup tant qu'à te faire un exemple, j'en ai fait un qui permet d'illustrer que $_REQUEST contient à la fois $_GET et $_POST mais que si il y a une "collision" (intersection des ensembles) entre les 2 cela ne garde qu'une des 2 valeurs, dans mon cas la valeur de $_POST mais on pourrait configurer pour que cela soit celle de $_GET par défaut.