it-swarm.dev

SSL con GET e POST

Sono abbastanza nuovo per la sicurezza, quindi perdona la mia domanda di base, ma SSL crittografa POST ma non richieste GET?

Ad esempio, se ho due richieste

OTTIENI: www.mycoolsite.com/index?id=1&type=xyz

POST

sito: www.mycoolsite.com/index {Params: id = 1 & type = xyz}

È sicuro supporre che qualcuno sia in grado di intercettare l'intera richiesta GET (leggendo id e tipo), ma se intercettano il POST saranno in grado di vedere il percorso del sito, ma perché sta andando su SSL, non riescono a vedere i parametri di ID e tipo?

58
TomJ

Ora, la domanda è: sai come appare una richiesta HTTP ?

Bene, supponendo di no, ecco un esempio:

GET /test?param1=hello&param2=world HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

Tutte di queste informazioni sono inserite all'interno del trasporto SSL - come dice gentilmente il commento sulla tua risposta. Questo significa:

  • Ottieni parametri sono crittografati.
  • Il corpo HTTP (parametri post) è crittografato.

Cosa non è necessariamente sicuro:

  • L'host che stai chiedendo. La maggior parte dei server Web in questi giorni supporta Host: something parametri in modo che più domini possano essere gestiti da un server Web su un'unica interfaccia e indirizzo IP. Chiaramente, questa intestazione è crittografata, tuttavia, se si esegue traffico non https verso il sito, dovrebbe essere chiaro a quali host è possibile connettersi. Anche se non è così, il DNS inverso ti dirà sicuramente cosa è ospitato su quell'IP e probabilmente puoi fare un'ipotesi ragionevole da lì.
  • Informazioni sul browser/client. Sfortunatamente ogni client https è diverso e il suo processo di negoziazione potrebbe potenzialmente dare via su quale piattaforma gira o su quale browser è. Questa non è la fine del mondo in alcun modo, è solo un dato di fatto da capire.

Le richieste POST sembrano simili per ottenere richieste, tranne per il fatto che contengono un corpo. Potrebbe apparire così:

POST /testpost HTTP/1.1
Host: subdomain.test.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

param1=hello&param2=hello

Ci sono alcune varianti più complicate, ovviamente, ma essenzialmente è comunque tutto crittografato.

59
user2213

Non ho visto questo menzionato nelle altre risposte, ma generalmente non dovresti inserire informazioni segrete (password) nelle richieste GET anche con SSL, ma usa POST invece. Perché? L'URL con il le informazioni sensibili verranno generalmente registrate ad entrambe le estremità, ad es. nell'elenco cronologico del browser (https://www.example.com?user=me&password=MyPassword), nonché i log sul server. POST le informazioni (specialmente con le password) generalmente non sono scritte nei log del server web, sebbene ovviamente possano essere configurate per essere registrate - quindi è meglio non riutilizzare (o usare simili) password in siti diversi.

36
dr jimbob

SSL crittografa e garantisce l'autenticità dell'intera connessione, inclusi il metodo e l'URL richiesti. Un GET è altrettanto protetto quanto un POST.

Quando SSL funziona come previsto, un intercettatore può vedere solo quale indirizzo IP si connette a quale indirizzo IP (e su quale porta, ma di solito è 443), a che ora e quanto. Se sulla stessa macchina sono presenti più host virtuali, l'utente malintenzionato non può sapere quale si sta contattando (tuttavia, l'ascoltatore può vedere le richieste DNS appena prima della richiesta HTTPS e fare un'ipotesi plausibile). Tutte queste informazioni sono anche autenticate: un attaccante attivo non può giocare man-in-the-middle e modificare i dati in transito.

Le cose che possono rendere SSL non funzionano come previsto:

  • Uso improprio dell'applicazione, in cui alcuni dati vengono inviati accidentalmente tramite HTTP semplice.
  • Una delle rare vulnerabilità nel protocollo SSL, come la recente vulnerabilità BEAST .
  • Manipolazione del certificato errata, che consente all'attaccante di passare come server, sia perché il certificato del server è stato trapelato, un'autorità di certificazione ha consegnato erroneamente un certificato all'attaccante, o perché il client non controlla correttamente il certificato del server.
    • In questa nota, ricorda che SSL, poiché viene utilizzato la maggior parte delle volte, autentica il server ma non il client. Il server non può assumere nulla sul client.
  • Un attacco del canale laterale può rivelare alcune informazioni al ricevitore. Ad esempio, il momento esatto in cui i partecipanti inviano i dati può rivelare qualcosa sul modo in cui i dati vengono calcolati e quindi sulla natura dei dati. Le dimensioni di ciascun pacchetto sono note anche all'attaccante. La rivelazione di ciò può dipendere dal fatto che i partecipanti prendano precauzioni e dalla natura delle informazioni. Una conversazione in tempo reale è molto più soggetta a tale analisi del traffico rispetto al download di un file.

Vedi anche Come è possibile che le persone che stanno osservando una connessione HTTPS stabilita non sappiano come decifrarla? per alcuni retroscena.

Solo per aggiungere un altro piccolo dettaglio, su come questo viene realizzato su HTTP.
Probabilmente ti starai chiedendo (o dovresti essere, se sai di avere familiarità con SSL handshake ), come viene creato il canale SSL, senza che la richiesta GET non venga inviata non crittografata? Che dire se la mia richiesta deve passare attraverso un proxy - come è possibile?

HTTP v1.1 ha introdotto un metodo CONNECT HTTP, che sostanzialmente invia una richiesta semplificata al server tramite un proxy, contenente solo l'URL dell'host più semplice (senza alcun ulteriore parametri, intestazioni o corpo). Sulla base di questa richiesta, viene creato un tunnel SSL e quindi la richiesta GET (o POST) originale viene inviata su di essa.

6
AviD

Un altro punto non menzionato è che se si utilizza GET e si dispone di contenuti di terze parti incorporati o collegati (ad esempio annunci di siti), quel sito di terze parti otterrà l'URL completo (con dati di parametri sensibili) nell'intestazione Referer.

Ciò espone i dati a terzi che non dovrebbero averli.

4
Rodney

Fonte: Risposta su Stack Overflow

metodo GET è destinato esclusivamente al recupero dei dati e non dovrebbe avere effetti collaterali . Ma POST è pensato per quello scopo specifico: alterare i dati sul lato server.

Le richieste GET possono essere facilmente ignorate (vedi Falsificazione richieste tra siti ) semplicemente posizionando un'immagine su una pagina mentre forgiando POST non sono così facili (questo è anche un motivo per cui dovresti solo autorizzare POST).

4