I'm developing a REST API that may take in private information. To
make it secure, I want to have the API only accessible using HTTPS.
Basically, what is the best way to enforce HTTPS only?
Se stai facendo un'API, il modo migliore è disattivare HTTP e pubblicare solo un'interfaccia HTTPS.
- HTTP di livello inferiore è una stampella per umani esigenti. Se stai eseguendo un sito di interfaccia utente, devi aspettarti che gli umani proveranno a passare alla versione HTTP non crittografata, perché sono così - ecco perché abbiamo tanti modi fantastici per reindirizzarli. Con un'API, puoi richiedere il codice di persone a HTTPS e semplicemente non fornire HTTP, perché non sono utenti con browser che specificano il tuo indirizzo.
- Gli umani perbene almeno hanno i browser che lavorano per loro, che cercano di tenere conto di tutte le cose belle che hai menzionato (codici di stato, intestazioni). Quando un programmatore dell'API esegue lo schiaffo insieme a un client API, spesso ignorano o sono creativi con cose del genere. Le 8 linee di RESTful Python che hanno estratto da StackExchange non enfatizzano la gestione degli errori o l'intestazione conforme alle specifiche RFC. Semplicemente non ci si può fidare che risponderanno al protocollo HTTP e ai suggerimenti e ai reindirizzamenti dell'intestazione.
- Le API sono meno probabili per inviare input non crittografati sul tuo TCP se stai utilizzando HTTPS ... ma non è impossibile. (Il loro primo pacchetto dopo il 3WHS potrebbe essere una richiesta JSON carica di dati invece di un CLIENT_HELLO TLS ... ma se non ricevono mai una risposta (e non lo faranno se lo faranno) impareranno a smettere di attaccare digita abbastanza presto.) La lezione qui è, ancora una volta, ti preghiamo di non fidarti dei programmatori dei client API per fare la cosa giusta. E non premiare mai di ignorare la crittografia con una risposta legittima, anche una 403 Proibita (come potrebbero ottenere se supporti HTTP).
- Set the HTTP status code to 403 Forbidden
- Send the Strict-Transport-Security header
- Redirect to the HTTPS URL using the Location header
Queste sono tutte cose eccellenti se si dispone di un sito HTTP e si desidera spingere gli utenti che portano i browser. Ma quando si ha a che fare con un'API, anziché con un browser, si tratta di un insieme di ipotesi che sono meno probabili essere vere e meno necessarie in primo luogo.