HTTPS Intestazione richiesta POST rispetto al corpo della richiesta

13

C'è qualche differenza di sicurezza tra l'immissione di dati sensibili, come una chiave API in una richiesta POST header rispetto alla richiesta POST body assumendo che il server API sia solo HTTPS ?

Mentre si vedono spesso le chiavi API nell'intestazione Autorizzazione o in un'intestazione X-API-KEY personalizzata, posizionare la chiave nell'intestazione aumenta effettivamente il livello di sicurezza per la chiave o è strettamente una convenzione di progettazione API?

    
posta pxwise 26.08.2015 - 19:37
fonte

2 risposte

10

Se il trasporto stesso è protetto (cioè https), un utente malintenzionato non può annusare i dati. Ma potrebbe essere registrato sul lato server e il server potrebbe essere successivamente compromesso o qualche perdita di sicurezza potrebbe causare la visualizzazione dei file di registro. Tali file di registro di solito contengono l'URL e potrebbero contenere altre righe dalle intestazioni come User-Agent, Referer e altre intestazioni se specificato con un formato di log personalizzato. Pertanto potrebbe essere una cattiva idea inserire queste chiavi API nell'intestazione della richiesta, a meno che non si accerti che non vengano registrate.

Un argomento contro il mettere la chiave nel corpo della richiesta è che ora sarebbe possibile creare un semplice modulo HTTP che include la chiave che è più facile da usare come richiesta CSRF. Quando si include la chiave API come intestazione, invece, l'utente malintenzionato deve essere in grado di eseguire una richiesta XHR ed è soggetto alle restrizioni di CORS .

Un altro motivo per non includere la chiave nell'URL è che potrebbe essere incluso nell'intestazione Referer di una richiesta successiva. Inoltre, gli URL di solito sono contenuti nella cronologia dei browser in modo da avere un altro posto che potrebbe essere compromesso. Ciò è rilevante solo per le normali richieste del browser, ovvero le richieste XHR o REST eseguite dalle applicazioni non sono interessate.

Alcune spiegazioni sul significato di "intestazione": a volte uno usa il nome "intestazione" per distinguere la parte iniziale del messaggio HTTP e il corpo. In questo caso l'URL fa parte dell'intestazione (riga di richiesta). Altre volte si parla delle intestazioni (plurale) e si intende solo la coppia "campo: valore", cioè non include la riga di richiesta con l'URL. Per me non è del tutto chiaro quale significato sia usato nella domanda, quindi è meglio che li abbia trattati entrambi.

    
risposta data 26.08.2015 - 19:49
fonte
4

Non penso che ci sia un significativo vantaggio in termini di sicurezza per utilizzarlo in un'intestazione HTTP (senza contare l'URL che viene inviato nella riga di richiesta che avvia la richiesta HTTP, dove devi essere più consapevole di essere loggato cronologia del browser o registri del server) rispetto al corpo della richiesta POST.

Il vantaggio di inviare le chiavi in un'intestazione di autorizzazione o in un'intestazione X-API-KEY personalizzata "sarebbe la separazione e la coerenza tra più metodi nella tua API. È possibile gestire l'autenticazione con lo stesso codice server per i metodi GET, POST, PUT, ecc. Controllando il campo dell'intestazione utilizzato dall'API. Inoltre, se l'utente deve inviare altri dati POST / PUT nel corpo della richiesta come parte della loro richiesta API, viene tenuto separato dai dati di autenticazione.

    
risposta data 26.08.2015 - 20:14
fonte

Leggi altre domande sui tag