2014-09-03 18 views
5

Abbiamo utilizzato CouchDB in produzione, principalmente creando app in ambienti controllati. La maggior parte delle volte, utilizziamo una libreria di middleware per effettuare chiamate dirette su couchdb/cloudant, evitando così le chiamate dirette (front-end JavaScript dirette su CouchDB/Cloudant).CouchDB e Cloudant Security

Per motivi di sicurezza, è ovvio che per un database CouchDB autenticato:
http://{username}:{password}@IPAddress:Port/DB
OR per cloudant:
https://{username}:{password}@username.cloudant.com/DB, Se la chiamata viene effettuata direttamente da JavaScript, strumenti nei browser Developer oggi permettono ad una persona di realizzare questo chiama e quindi ha accesso al tuo database interamente.

Gli allegati sono solitamente dolorosi quando vengono gestiti nel middleware. È vantaggioso che il cloudant gestisca la memorizzazione nella cache e la pubblicazione degli allegati direttamente sul front-end, evitando così il nostro middleware. Tuttavia, sul web e con un pubblico enorme, effettuare chiamate dirette al nostro ambiente cloudant è complicato.

Abbiamo iniziato con un account cloud remoto separato per tutti gli allegati in modo tale che uno inquisitive boy non manomettere gli effettivi metadati o le informazioni dei nostri utenti. Quindi, l'unico account cloud che possono avere accesso è quello degli allegati poiché stiamo facendo chiamate JavaScript dirette al nostro database.

Domanda: Come possiamo trovare un modo in cui nascondiamo il nome utente e la password del nostro ambiente cloudant, consentendoci così di effettuare chiamate dirette JavaScript in modo sicuro su cloudant? La nostra infrastruttura è interamente nel cloud, quindi non abbiamo proxy e materiale con cui lavorare. Abbiamo sentito parlare di servizi di accorciamento dell'URL, CDN e.t.c. ma, non abbiamo trovato una soluzione davvero conclusiva.

risposta

0

Provare a utilizzare l'endpoint _session. Questo imposterà l'autenticazione dei cookie.

0

Come trovare un modo in cui nascondiamo il nome utente e la password del nostro ambiente cloudant, consentendoci così di effettuare chiamate dirette JavaScript in modo sicuro su cloudant?

Per quanto ne so non è possibile farlo senza utilizzare un middleware o qualche tipo di proxy. Ma ciò non significa che siamo completamente indifesi. couchdb ci dà un po 'di lance per colpire inquisitive boy :)

Quindi una buona cosa che hai fatto è rendere separato il database degli allegati. Non menzioni nella tua domanda se stai usando lo schema di autorizzazione di couchdb, quindi assumerò che tu non lo sia. Quindi il primo passo è creare un utente nel database couchdb _users e quindi assegnarlo come membro nel database degli allegati. Maggiori dettagli here e here.

Dopo questo passaggio si dovrebbe avere un membro nel database degli allegati. Il motivo per cui desideriamo un membro e non un amministratore è che i membri non dispongono delle autorizzazioni per scrivere o leggere i documenti di progettazione.

È un inizio ma non è sufficiente poiché un membro può ancora leggere tramite _all_docs e questo è un attacco dos proprio lì. Quindi il problema che dobbiamo affrontare ora è che lo facciamo al momento

https: // {nome utente}: {password} @ nomeutente.cloudant.com/DB

una mossa molto buona sarebbe quella di cambiare per

https: // {username}: {Password} @ someurl.com/

Qual è la differenza tra questi due? Bene, nasconde la posizione del tuo database e rende più difficile l'accesso ai metodi integrati. Questo può essere realizzato con l'aiuto di vhosts configuration e some rewrite rules. Alcuni very good stuff sono sul blog di Caolan anche

Con questo in posizione hai due cose per te.

  1. Il Stalkerinquisitive boy sarà all'oscuro dove le chiamate vanno a.

  2. Non ci sarà modo di ottenere il contenuto di documenti sconosciuti effettuando chiamate dirette. Può accedere al tuo database solo attraverso le regole che hai impostato.

Ancora non sicuro al 100% ma va bene per quanto riguarda la sicurezza del livello di lettura. Spero che questo ti aiuti.