Quali semplici considerazioni sulla sicurezza posso / devo fare per un'API di sola lettura?

10

In questo momento sto configurando un'API, da consumare sul lato client per configurare un sito di directory. Mi sto chiedendo quali sono i passaggi extra che devo fare solo per evitare che le persone ottengano l'accesso in scrittura ai dati.

Alcune note:

  • L'API / database non ha informazioni private. Tutte le informazioni sono disponibili e nessuna di esse è PII ecc. Non sarebbe un problema per me se qualcuno leggesse tutti i dati.
  • Attualmente l'API è un'app Sinatra e ha metodi di scrittura in modo da poter aggiungere dati, protetti da HTTP Auth.
  • Sarà ospitato su Heroku e servito solo tramite HTTPS.
  • I dati non cambieranno di frequente.
  • I dati verranno sottoposti regolarmente a backup in modo tale che persino un'effrazione distruttiva non sia la cosa peggiore al mondo.

Le mie domande:

  • Ci sono aree specifiche che dovrei leggere in merito alla sicurezza in questa situazione?
  • Spostare i metodi di scrittura dell'API (e l'amministratore) in un'app completamente diversa e quindi semplicemente sincronizzare il database a gestire la maggior parte dei problemi di sicurezza?
  • L'autenticazione HTTP è sufficientemente sicura con un nome utente e una password lunghi oppure esiste un metodo migliore dell'autorizzazione HTTP per autorizzarmi nell'amministratore?

(Nota: ho cercato domande correlate e ho trovato questo: È sicuro BASIC-Auth se eseguito su HTTPS? , ma non è chiaro se esiste un'opzione o un metodo migliori che non aprano ancora più implicazioni sulla sicurezza)

  • Qualche altro consiglio o idea?

Al momento sono un po 'fuori dal mio elemento e voglio far spedire questo progetto, piuttosto che soffermarmi troppo a lungo. Sono sicuro che non ci sarà alcun rimpiazzo per un corretto addestramento sulla sicurezza delle applicazioni, ma spero che a causa della natura pubblica dei dati, posso ignorare la maggior parte delle situazioni di sicurezza per iniziare e impiegare più tempo per apprenderle in seguito.

Saluti, Anders

    
posta Anders H 28.05.2013 - 00:14
fonte

3 risposte

6

Essenzialmente devi solo scorrere attraverso lo standard OWASP Top 10 e concentrarti su come ottenere il controllo degli accessi correttamente .

Per quanto riguarda l'autenticazione, l'autenticazione di base dovrebbe essere evitata per una serie di motivi. È brutto, insicuro e non è universalmente supportato. Il modello standard consiste nel fornire agli utenti una chiave API generata a caso che sia separata dalle normali credenziali di accesso. Ciò consente un'autenticazione ragionevole senza il rischio di furto di credenziali. Indipendentemente, raccomando ancora HTTPS sull'intera API e sembra che tu stia già facendo questo.

    
risposta data 28.05.2013 - 15:52
fonte
6

La divisione delle API è davvero l'opzione migliore, dal momento che il sito pubblico deve essere solo di sola lettura, non c'è alcun motivo per cui le API di scrittura possano essere utilizzate. Ciò ti darebbe anche la possibilità di implementare ulteriori restrizioni più facilmente, come limitare gli indirizzi IP che possono accedere al sito di amministrazione.

In caso contrario, l'utilizzo di una chiave API come Polynomial menzionata o di un token di sessione per accedere alle API è l'opzione migliore, in quanto consente di chiamare le API senza dover inviare credenziali per ogni richiesta, che è potenzialmente più sicura.

Tuttavia, sembra che i problemi di sicurezza che si verificano attorno alla tua applicazione siano abbastanza minimi e minori, quindi direi che l'autenticazione di base con una password sufficientemente potente e HTTPS potrebbe essere un'implementazione iniziale perfettamente accettabile. Dato che sei l'unico che scriverà sul sito, non so che sono d'accordo con le preoccupazioni di Polynomial sulla bruttezza, o sulla mancanza di supporto universale.

I problemi di insicurezza relativi all'autenticazione di base sono stati trattati nel post di riferimento di AviD, e se volevi mitigarli , potresti implementare un modulo di autenticazione basato su Sinatra come Warden invece di utilizzare l'autenticazione di base.

    
risposta data 28.05.2013 - 16:01
fonte
5

Questa domanda è troppo ampia per poter rispondere. Ad essere onesti, sembra che tu stia chiedendo a qualcuno di fare il tuo lavoro per te. Detto ciò, cercherò di risponderti nel miglior modo possibile. La prima cosa che devi fare è occuparti della Lista 10 di OWASP . Prestare particolare attenzione alle vulnerabilità di iniezione e alla gestione delle sessioni.

Dopodiché, assicurati che l'utente del database utilizzato dal lato pubblico della tua API abbia accesso in sola lettura al database.

Per quanto riguarda l'autenticazione di base HTTP HTTP , non penso che porti un enorme rischio per la sicurezza nel tuo caso finché stai usando HTTPS. Dal momento che solo gli amministratori dovranno autenticarsi, non c'è bisogno di complicare eccessivamente il processo con le chiavi API.

    
risposta data 28.05.2013 - 16:00
fonte

Leggi altre domande sui tag