TL; DR: HTTPS fornisce la crittografia ed è l'unica cosa che protegge i parametri.
È risaputo che le richieste GET con? xx = yy argomenti incorporati possono essere modificati durante il trasporto e quindi non sono sicuri.
Se non si utilizza la crittografia, tutto è insicuro: HTTP, Telnet, FTP, TFTP, IRC, SNMP, SMTP, IMAP, POP3 , DNS, Gopher ...
Se cambio la richiesta in POST ...
... non cambia nulla.
e usa HTTPS ...
HTTPS cambia tutto.
Qualsiasi richiesta HTTP non protetta da TLS non è protetta. Non importa se usi GET, POST, PUT, se è un'intestazione personalizzata, nessuno cambia nulla.
Ad esempio, questa è una richiesta GET:
GET / test? field1 = value1&field2 = value2 HTTP / 1.1Host: foo.examAccept: text / html
E questa è una richiesta POST:
POST / test HTTP / 1.1Host: foo.exampleContent-Type: application / x-www-form-urlencodedContent-Length: 27field1 = value1&field2 = value2
Qual è la differenza? Sulla richiesta GET, i parametri sono sulla prima riga e sul POST, i parametri sono sull'ultima riga. Solo quello. Le ragioni tecniche dietro GET o POST non sono il punto qui.
Supponiamo che i parametri di stile GET siano stati aggiunti a una richiesta POST: quei parametri verrebbero ignorati in modo affidabile?
Dipende interamente dall'applicazione. Su PHP, ad esempio, se l'applicazione si aspetta $ username = $ _POST ['username']
, l'invio come parametro GET non cambia nulla, poiché l'applicazione riceverà il parametro POST.
Che dire di una sorta di attacco di downgrade della sicurezza? Se il manipolatore dell'URL impone il fallimento delle transazioni HTTPS, il client / server "utilmente" effettua il downgrade a HTTP, il che consentirebbe la manipolazione del corpo POST non crittografato.
Non facile per server configurati correttamente. Se usano l'intestazione HTTP Strict Transport Security, forza il client ad accedere al sito solo utilizzando HTTPS, anche se l'utente forza HTTP e la porta 80. Il browser aggiornerà utilmente a HTTPS, non viceversa.
Anche su server che non utilizzano intestazioni HSTS, se il primo accesso viene effettuato tramite HTTPS, non è banale eseguire il downgrade a HTTP. L'autore dell'attacco deve inviare un certificato contraffatto e il client deve accettare il certificato contraffatto affinché una connessione HTTPS possa essere reindirizzata a HTTP. Ma se l'attaccante ha avuto successo, di solito continuerà a utilizzare HTTPS poiché il client ha già accettato comunque il suo certificato falso.