TL; DR: HTTPS fournit le chiffrement, et c'est la seule chose qui protège les paramètres.
Il est bien connu que les requêtes GET avec des arguments? xx = yy incorporés peuvent être modifiés en transit, et ne sont donc pas sécurisés.
Si vous n'utilisez pas de cryptage, tout n'est pas sécurisé: HTTP, Telnet, FTP, TFTP, IRC, SNMP, SMTP, IMAP, POP3 , DNS, Gopher ...
Si je change la requête en POST ...
... cela ne change rien du tout.
et utilisez HTTPS ...
HTTPS change tout.
Toute requête HTTP non protégée par TLS n'est pas protégée. Peu importe si vous utilisez GET, POST, PUT, s'il s'agit d'un en-tête personnalisé, rien ne change rien.
Par exemple, il s'agit d'une requête GET:
GET / test? field1 = value1&field2 = value2 HTTP / 1.1Host: foo.examAccept: text / html
Et ceci est une requête POST:
POST / test HTTP / 1.1Host: foo.exampleContent-Type: application / x-www-form-urlencodedContent-Length: 27field1 = value1&field2 = value2
Quelle est la différence? Sur la requête GET, les paramètres sont sur la première ligne et sur le POST, les paramètres sont sur la dernière ligne. Juste ça. Les raisons techniques derrière GET ou POST ne sont pas le point ici.
Supposons que des paramètres de style GET aient été ajoutés à une requête POST - ces paramètres seraient-ils ignorés de manière fiable?
Cela dépend entièrement de l'application. Sur PHP, par exemple, si l'application attend $ username = $ _POST ['username']
, l'envoyer en tant que paramètre GET ne change rien du tout, car l'application obtiendra le paramètre POST.
Qu'en est-il d'une sorte d'attaque de rétrogradation de sécurité? Si le manipulateur d'URL force l'échec des transactions HTTPS, puis le client / serveur rétrograde "utilement" vers HTTP, ce qui permettrait de manipuler le corps POST non chiffré.
Pas facile pour les serveurs correctement configurés. S'ils utilisent l'en-tête HTTP Strict Transport Security, cela oblige le client à accéder uniquement au site en utilisant HTTPS, même si l'utilisateur force HTTP et le port 80. Le navigateur mettra à jour utilement vers HTTPS, pas l'inverse.
Même sur les serveurs qui n'utilisent pas les en-têtes HSTS, si le premier accès se fait via HTTPS, il n'est pas anodin de revenir à HTTP. L'attaquant doit envoyer un faux certificat et le client doit accepter le faux certificat pour qu'une connexion HTTPS soit redirigée vers HTTP. Mais si l'attaquant réussit, il continuera généralement à utiliser HTTPS car le client a déjà accepté son faux certificat de toute façon.