Enforcing HTTPS Only With REST API

0

Sto sviluppando un'API REST che potrebbe contenere informazioni private. Per renderlo sicuro, voglio che l'API sia accessibile solo tramite HTTPS. In sostanza, qual è il modo migliore per applicare solo HTTPS?

Ecco alcune cose a cui stavo pensando quando viene effettuata una richiesta HTTP non sicura:

  • Imposta il codice di stato HTTP su 403 Forbidden
  • Invia l'intestazione Strict-Transport-Security
  • Reindirizza all'URL HTTPS utilizzando l'intestazione Location
posta ub3rst4r 01.08.2017 - 18:43
fonte

1 risposta

3

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.

    
risposta data 01.08.2017 - 21:16
fonte

Leggi altre domande sui tag